sql >> Databáze >  >> RDS >> Sqlserver

Jak rozdělit datové pole symbolu v dočasné tabulce na 5 sloupců?

Řešení je snadné:

  1. rozdělte hodnoty podle \s (mezera) zachování pořadí prvků
  2. otočte výsledek
  3. z konkrétního sloupce extrahujte pouze čísla nebo pouze písmena

K rozdělení hodnot můžete použít XML jako toto . Chcete-li extrahovat pouze čísla, můžete provést řetězec REPLACE s odstraněním všech jednotek. Chcete-li odstranit čísla a ponechat text, můžete použít REPLACE znovu s.

V mém prostředí používám mnoho funkcí SQL CLR a řešení vypadá takto:

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;

Můžete zkontrolovat toto odpověď, abyste získali takové funkce i ve svém prostředí.

Ve vašem případě bude snazší a bezpečnější použít XML k rozdělení dat a nahrazení pro tvarování výsledků.




  1. Odkazování na stejnou tabulku jako cíl UPDATE a zdroj dat v MySql

  2. Jak získat primární klíč tabulky?

  3. Vybíráte všechna pole kromě jednoho?

  4. Heroku PG:Obnovit přístup k zápisu byl zrušen