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

Как да разделя низ с помощта на разделител char с T-SQL?

За вашите конкретни данни можете да използвате

Select col1, col2, LTRIM(RTRIM(SUBSTRING(
    STUFF(col3, CHARINDEX('|', col3,
    PATINDEX('%|Client Name =%', col3) + 14), 1000, ''),
    PATINDEX('%|Client Name =%', col3) + 14, 1000))) col3
from Table01

РЕДАКТИРАНЕ - charindex срещу patindex

Тест

select col3='Clent ID = 4356hy|Client Name = B B BOB|Client Phone = 667-444-2626|Client Fax = 666-666-0151|Info = INF8888877 -MAC333330554/444400800'
into t1m
from master..spt_values a
cross join master..spt_values b
where a.number < 100
-- (711704 row(s) affected)

set statistics time on

dbcc dropcleanbuffers
dbcc freeproccache
select a=CHARINDEX('|Client Name =', col3) into #tmp1 from t1m
drop table #tmp1

dbcc dropcleanbuffers
dbcc freeproccache
select a=PATINDEX('%|Client Name =%', col3) into #tmp2 from t1m
drop table #tmp2

set statistics time off

Тайминг

CHARINDEX:

 SQL Server Execution Times (1):
   CPU time = 5656 ms,  elapsed time = 6418 ms.
 SQL Server Execution Times (2):
   CPU time = 5813 ms,  elapsed time = 6114 ms.
 SQL Server Execution Times (3):
   CPU time = 5672 ms,  elapsed time = 6108 ms.

PATINDEX:

 SQL Server Execution Times (1):
   CPU time = 5906 ms,  elapsed time = 6296 ms.
 SQL Server Execution Times (2):
   CPU time = 5860 ms,  elapsed time = 6404 ms.
 SQL Server Execution Times (3):
   CPU time = 6109 ms,  elapsed time = 6301 ms.

Заключение

Времената за CharIndex и PatIndex за 700k разговори са в рамките на 3,5% едно от друго, така че не мисля, че ще има значение кое от двете се използва. Използвам ги взаимозаменяемо, когато и двете могат да работят.



  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 връзка, който трябва да използвам за достъп до localhost\SQLEXPRESS с удостоверяване на Windows или SQL удостоверяване?

  2. Премахнете и намалете припокриващите се периоди от време

  3. SQL Server:Индексни колони, използвани в like?

  4. SQL - Извикване на съхранена процедура за всеки запис

  5. Автоматична корекция на плана в SQL Server