Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разделяне на ограничен низ с променлива дължина в множество редове (SQL)

Първо, позволете ми само да кажа, че това е причината да не разполагате с данни, разделени със запетаи в полето. Няма лесен или ефективен начин за работа с него.

Въпреки това можете да използвате рекурсивна заявка, за да разделите низа и да получите числата от него:

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 > ''

Резултат:

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. Как да изпращате имейли от SQL Server (T-SQL)

  2. Доставчикът на OLE DB „Microsoft.Jet.OLEDB.4.0“ не може да се използва за разпределени заявки

  3. Как да създадете съхранена процедура в SQL Server

  4. Не може да се свърже с localDB в VS2012 – Възникна грешка, свързана с мрежата или специфична за екземпляр, при установяване на връзка със SQL Server...

  5. SQL за връщане на първите две колони от таблица