Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak podzielić pole danych symbolu w tabeli tymczasowej na 5 kolumn?

Rozwiązanie jest proste:

  1. podziel wartości przez \s (spacja) zachowywanie kolejności elementów
  2. obróć wynik
  3. wyodrębnij tylko cyfry lub tylko litery z określonej kolumny

Aby podzielić wartości, możesz użyć XML jak to . Aby wyodrębnić tylko liczby, możesz wykonać łańcuch REPLACE s usunięcie wszystkich jednostek. Aby usunąć cyfry i zostawić tekst, możesz użyć REPLACE s ponownie.

W moim środowisku używam wielu funkcji SQL CLR, a rozwiązanie wygląda tak:

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;

Możesz sprawdzić to odpowiedź, aby uzyskać takie funkcje również w swoim środowisku.

W Twoim przypadku łatwiej i bezpieczniej będzie używać XML do dzielenia danych i zastępowania ich w celu kształtowania wyników.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wymagane zapytanie zliczania

  2. Argument typu numeryczny jest nieprawidłowy dla argumentu 1 funkcji podciągu

  3. Najlepsze narzędzie do odzyskiwania SQL na rok 2020 do odzyskiwania kluczowej bazy danych SQL

  4. Zwróć klucze podstawowe z połączonego serwera w SQL Server (przykłady T-SQL)

  5. Pojawia się błąd podczas przechowywania danych na serwerze sql 2005 przez pole tekstowe