Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để tách chuỗi bằng cách sử dụng ký tự phân tách ký tự bằng T-SQL?

Đối với dữ liệu cụ thể của bạn, bạn có thể sử dụng

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

CHỈNH SỬA - charindex so với patindex

Kiểm tra

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

Thời gian

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.

Kết luận

Thời gian cho CharIndex và PatIndex cho 700 nghìn cuộc gọi nằm trong phạm vi 3,5% của nhau, vì vậy tôi không nghĩ nó sẽ quan trọng nếu cái nào được sử dụng. Tôi sử dụng chúng thay thế cho nhau khi cả hai đều có thể hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Liệt kê các truy vấn đang chạy trên SQL Server

  2. Cách IIF () hoạt động trong SQL Server

  3. Đổi tên Kiểu dữ liệu do người dùng xác định trong SQL Server (T-SQL)

  4. Làm cách nào để nhóm trên các phạm vi liên tục

  5. Tên chính xác cho một bảng kết hợp (mối quan hệ nhiều-nhiều)