0

このような文字列があります1234-56-7-8-9012。これは任意のサイズにする-ことができ、間の値は任意のサイズにすることができます。この文字列の途中でを抽出する必要があり7ますが、文字列のサイズの変化に対応できません。これは私が使用しているものですが、サイズの変更は必要ありません:

@String = '1234-56-7-8-9012'

SUBSTRING(
        SUBSTRING(@String,CHARINDEX('-',@String)+1,LEN(@String))
        ,CHARINDEX('-'
            ,SUBSTRING(@String,CHARINDEX('-',@String)+1,LEN(@String))
        )+1
        ,1
    )

これで 7 の値が得られますが、その値の長さが 2 になることもあります。基本的には 2nd と 3rd の間の数字を取得する必要があり-ます。

4

5 に答える 5

1

これを試して:

declare @String varchar(50) = '1234-56-7-8-9012'

select substring(@String, charindex('-',@String,charindex('-',@String,1)+1)+1,
    charindex('-',@String,charindex('-',@String,charindex('-',@String,1)+1)+1)-
    charindex('-',@String,charindex('-',@String,1)+1)-1)
于 2014-03-20T12:48:15.387 に答える
0

してみてください:

declare @String nvarchar(1000) = '1234-56-72-9012'
select 
    LEFT(y, CHARINDEX('-', y)-1)
from(
    select 
        RIGHT(x, LEN(x)-CHARINDEX('-', x)) y
    from(
        select RIGHT(@String, LEN(@String)-CHARINDEX('-', @String)) x
    )x1
)x2
于 2014-03-20T12:46:48.540 に答える
0

SQL Server が正規表現をサポートしていると思うので、正規表現を使用することを考えてみてください。今必要なのは、 を介して 2 番目と 3 番目の「-」の間の数字を見つける方法を知ることだけregexです。

于 2014-03-20T12:47:16.797 に答える
0

デモ

SELECT SUBSTRING(@String, 
                 CHARINDEX('-',@String,CHARINDEX('-',@String,1)+1)+1,
                 CHARINDEX('-',@String,CHARINDEX('-',@String,CHARINDEX('-',@String,1)+1)+1)- CHARINDEX('-',@String,CHARINDEX('-',@String,1)+1)-1);
于 2014-03-20T12:53:11.593 に答える