sql >> データベース >  >> RDS >> Sqlserver

文字のn番目の出現を見つけてSQLseverで部分文字列を取得する方法

    あなたの質問を本当に理解できたかどうかはわかりませんが、私の推測は次のとおりです:

    カスタム 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 
    

    デモはこちら

    これは私の分割機能です:

    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. MVC3アプリケーションでフォーム認証を使用してOracleデータベースを使用する

    2. サンプルデータ-更新ステートメントと挿入ステートメントの両方で構成されるストアドプロシージャの実行中に発行されます

    3. PHP、MySQLなど全体で日付を管理するための最良の方法は何ですか?

    4. 説明に使用するデータ型は何ですか?