sql >> Database >  >> RDS >> Sqlserver

Hoe het symboolgegevensveld op de tijdelijke tabel te splitsen in 5 kolommen?

De oplossing is eenvoudig:

  1. verdeel de waarden door \s (spatie) volgorde van elementen behouden
  2. draai het resultaat
  3. extraheer alleen cijfers of alleen letters uit de specifieke kolom

Om de waarden te splitsen kunt u XML . gebruiken vind dit leuk . Om alleen getallen te extraheren, kunt u een reeks REPLACE . uitvoeren s het verwijderen van alle eenheden. Om de cijfers te verwijderen en de tekst te laten staan, kunt u REPLACE . gebruiken s weer.

In mijn omgeving gebruik ik veel SQL CLR-functies en de oplossing ziet er als volgt uit:

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;

Je kunt dit controleren antwoord om dergelijke functies ook in uw omgeving te krijgen.

In uw geval is het gemakkelijker en veiliger om XML te gebruiken om de gegevens te splitsen en te vervangen om de resultaten vorm te geven.




  1. Mysql verwijdert het specifieke woord in een door komma's gescheiden tekenreeks

  2. Django- Hoe berichten die tussen gebruikers worden verzonden in kaart te brengen?

  3. Coderingsfout met sqlalchemy en postgresql

  4. Barman 2.11:barman-cloud-restore en barman-cloud-wal-restore