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

Dzielenie ciągów rozdzielanych o zmiennej długości na wiele wierszy (SQL)

Po pierwsze, powiem tylko, że to jest powód, dla którego nie powinieneś mieć danych oddzielonych przecinkami w polu w pierwszej kolejności. Nie ma łatwego i wydajnego sposobu pracy z nim.

To powiedziawszy, możesz użyć zapytania rekurencyjnego, aby podzielić ciąg i uzyskać z niego liczby:

with split as
(
  select
    item = cast('' as varchar(max)),
    source = cast('20,0, 5,,^24,0, 0,,^26,0, 0,,^281,0, 0,,^34,0, 2,,^48,0, 2,,^44,0, 2,,^20,0, 10,,^20,5, 5,,^379,1, 1,,^26,1, 2,,^32,0, 1,,^71,0, 2,,^' as varchar(max))
  union all
  select
    item = substring(source, 1, charindex(',,', source)),
    source = substring(source, charindex(',,', source) + 2, 10000)
  from split
  where source > ''
)
select substring(item, 1, charindex(',', item) -1)
from split
where item > ''

Wynik:

20
^24
^26
^281
^34
^48
^44
^20
^20
^379
^26
^32
^71



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz zadanie agenta programu SQL Server w Azure Data Studio

  2. Czy istnieje narzędzie do budowania drzewa relacji procedur przechowywanych i funkcji używanych w SQL Server 2008?

  3. Użyj SCOPE_IDENTITY(), aby zwrócić ostatnio wstawioną wartość tożsamości w tym samym zakresie (SQL Server)

  4. Przykłady SIN() w SQL Server

  5. Błąd konwersji typu danych varchar