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

Jak podzielić ciąg znaków za pomocą ogranicznika za pomocą T-SQL?

W przypadku konkretnych danych możesz użyć

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

EDYTUJ — charindex kontra patindex

Testuj

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

Czasy

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.

Wniosek

Czasy dla CharIndex i PatIndex dla wywołań 700k są w zakresie 3,5% od siebie, więc nie sądzę, aby miało to znaczenie, którykolwiek zostanie użyty. Używam ich zamiennie, gdy oba mogą działać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyświetl listę wszystkich baz danych z serwera połączonego w programie SQL Server (przykłady T-SQL)

  2. Efektywne konwertowanie dat między czasem UTC a czasem lokalnym (tj. PST) w SQL 2005

  3. Jak utworzyć złożony klucz podstawowy w programie SQL Server (przykład T-SQL)

  4. SQL Server 2016:zapisywanie wyników zapytania w pliku CSV

  5. Jak odpytywać wartości z węzłów XML?