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

Jak uzyskać podciąg w SQLseverze przez znalezienie n-tego wystąpienia znaku?

Nie jestem pewien, czy naprawdę zrozumiałem twoje pytanie, ale oto moje przypuszczenie:

Możesz napisać niestandardowy Split funkcja, która dzieli przez ogranicznik (w tym przypadku ; ). Następnie możesz użyć ROW_NUMBER aby uzyskać żądaną część z podanym indeksem (tutaj 4).

Na przykład:

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 

Oto DEMO na sql-fiddle.

To jest moja funkcja dzielenia:

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. SQL Server Maksymalna liczba wierszy, które można wstawić w pojedynczej instrukcji wstawiania

  2. Dynamicznie przypisz nazwę pliku do ciągu połączenia programu Excel

  3. Uzyskiwanie podzbioru rekordów wraz z całkowitą liczbą rekordów

  4. Pamięć podręczna planu SQL Server 2008 jest prawie zawsze pusta

  5. Filtruj raport Power BI na podstawie bieżącego użytkownika