Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara mendapatkan substring di SQLsever dengan menemukan kemunculan karakter ke-n

Saya tidak yakin apakah saya benar-benar memahami pertanyaan Anda, tetapi inilah tebakan saya:

Anda dapat menulis Split custom khusus fungsi yang dibagi dengan pembatas (dalam hal ini ; ). Kemudian Anda dapat menggunakan ROW_NUMBER untuk mendapatkan bagian yang diinginkan dengan indeks yang diberikan(4 di sini).

Misalnya:

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 

Berikut DEMO di sql-fiddle.

Ini adalah fungsi split saya:

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. Database tidak dapat dibuka karena versi 782. Server ini mendukung versi 706 dan sebelumnya. Jalur penurunan versi tidak didukung

  2. Jalankan prosedur tersimpan SQL Server dengan parameter input

  3. Cara Mengubah Ukuran Kolom di SQL Server (T-SQL)

  4. SQL Server:Kolom indeks digunakan seperti?

  5. Menghilangkan Milidetik dalam Tanggal