Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come dividere il campo dati dei simboli sulla tabella temporanea in 5 colonne?

La soluzione è semplice:

  1. dividi i valori per \s (spazio) preservando l'ordine degli elementi
  2. Ruota il risultato
  3. estrai solo numeri o solo lettere dalla colonna specifica

Per dividere i valori puoi usare XML come questo . Per estrarre solo numeri puoi eseguire una catena di REPLACE s rimuovere tutte le unità. Per rimuovere i numeri e lasciare il testo, puoi utilizzare REPLACE s di nuovo.

Nel mio ambiente, sto usando molte funzioni SQL CLR e la soluzione è simile a questa:

SELECT PVT.id
      ,PVT.symbolData
      ,dbo.fn_Utils_RegexReplace ([0], '[^\d+]', '') AS [valuebefore]
      ,dbo.fn_Utils_RegexReplace ([0], '\d+', '') AS [unitbefore]
      ,[1] AS [symbole]
      ,dbo.fn_Utils_RegexReplace ([2], '[^\d+\.]', '') AS [valueafter]
      ,dbo.fn_Utils_RegexReplace ([2], '[\d+\.]', '') AS [unitafter]
FROM #TEMP
CROSS APPLY dbo.fn_Utils_RegexSplitWithOrder (SymbolData, '\s') RS
PIVOT
(
    MAX([value]) FOR [index] IN ([0], [1], [2])
) PVT
ORDER BY PVT.id;

Puoi controllare questo rispondere per ottenere tali funzioni anche nel tuo ambiente.

Nel tuo caso, sarà più facile e sicuro utilizzare XML per dividere i dati e sostituirli per dare forma ai risultati.