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

Hvordan opdeles symboldatafeltet på temp-tabellen til 5 kolonner?

Løsningen er nem:

  1. opdel værdierne med \s (mellemrum) bevarer rækkefølgen af ​​elementer
  2. pivot resultatet
  3. udtræk kun tal eller kun bogstaver fra den specifikke kolonne

For at opdele værdierne kan du bruge XML synes godt om dette . For kun at udtrække tal kan du udføre en kæde af REPLACE s fjerne alle enheder. For at fjerne tallene og forlade teksten, kan du bruge REPLACE s igen.

I mit miljø bruger jeg mange SQL CLR-funktioner, og løsningen ser således ud:

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;

Du kan tjekke dette svar for også at få sådanne funktioner i dit miljø.

I dit tilfælde vil det være nemmere og sikrere at bruge XML til at opdele dataene og erstatte dem for at forme resultaterne.




  1. RETURERER data fra opdaterbar visning ikke virker?

  2. Lukning af postgres (pg) klientforbindelse i node.js

  3. Sammenlign værdier af to kolonner og vælg derefter den største værdi

  4. Eksempler på parametriserede forespørgsler