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

Cách lấy chuỗi con trong SQLsever bằng cách tìm ký tự xuất hiện thứ n

Tôi không chắc liệu mình có thực sự hiểu câu hỏi của bạn hay không, nhưng đây là suy đoán của tôi:

Bạn có thể viết một Split tùy chỉnh hàm phân tách bằng dấu phân cách (trong trường hợp này là ; ). Sau đó, bạn có thể sử dụng ROW_NUMBER để có được phần mong muốn với một chỉ số nhất định (4 ở đây).

Ví dụ:

DECLARE @string VARCHAR(100); 
SET @string='field1;field2;field3;field4;field5;field6;field7'; 
DECLARE @index INT; 
SET @index = 4; 

WITH cte 
     AS (SELECT item, 
                rn=Row_number() 
                     OVER( 
                       ORDER BY item) 
         FROM   dbo.Split(@string, ';')) 
SELECT TOP 1 item 
FROM   cte 
WHERE  rn = @index 

Đây là DEMO trên sql-fiddle.

Đây là chức năng phân tách của tôi:

CREATE FUNCTION [dbo].[Split]
(
    @ItemList NVARCHAR(MAX), 
    @delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))  
AS      

BEGIN    
    DECLARE @tempItemList NVARCHAR(MAX)
    SET @tempItemList = @ItemList

    DECLARE @i INT    
    DECLARE @Item NVARCHAR(4000)

    SET @tempItemList = REPLACE (@tempItemList, ' ', '')
    SET @i = CHARINDEX(@delimiter, @tempItemList)

    WHILE (LEN(@tempItemList) > 0)
    BEGIN
        IF @i = 0
            SET @Item = @tempItemList
        ELSE
            SET @Item = LEFT(@tempItemList, @i - 1)
        INSERT INTO @IDTable(Item) VALUES(@Item)
        IF @i = 0
            SET @tempItemList = ''
        ELSE
            SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
        SET @i = CHARINDEX(@delimiter, @tempItemList)
    END 
    RETURN
END  


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao UDF lại chậm hơn nhiều so với truy vấn con?

  2. thay đổi bảng sau đó cập nhật trong một câu lệnh duy nhất

  3. Cập nhật hàng trong bảng dựa trên truy vấn phụ trên cùng một bảng

  4. Trường dữ liệu SQL tạm thời

  5. Giao lộ trong MDX