Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите подниз в SQLsever чрез намиране на n-то появяване на символ

Не съм сигурен дали наистина разбрах въпроса ви, но ето моето предположение:

Можете да напишете персонализиран Split функция, която разделя чрез разделител (в този случай ; ). След това можете да използвате ROW_NUMBER за да получите желаната част с даден индекс (4 тук).

Например:

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 

Ето ДЕМО на sql-fiddle.

Това е моята разделена функция:

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-SQL - SQL сървър

  2. Недостатъци на MARS (множество активни набори от резултати)?

  3. Кумулираща стойност на текущия ред + сбор от предишни редове

  4. SQL Server, намерете произволна последователност от стойности

  5. Ръководство за CTE в SQL Server