2016-05-10 15 views
1

!03と!03の間の値を取得する必要があります。2文字の文字列値を取得する

例:20151104

注:文字列は常に22文字ではありませんが、私は唯一の間にある値と心配

JDC!0320151104!03OUT 

私はお返しに次の文字列を取得する必要があります! 03および!03。

これはこれまで私が行ってきたことです。私はさらにこれ以上進歩を遂げることができませんでした:

SELECT 
SUBSTRING(
RegStatsID, 
CHARINDEX('!', RegStatsID) + 3, 
CHARINDEX('!', REVERSE(RegStatsID)) 
) 
From TableX 

答えて

1

あなたが解決策を見つけたグレート!

これは良いかもしれない:

XMLタグで置き換えることによって、あなたは簡単に第二の「ノード」を選ぶことができる「03!」を。あなたの文字列が<x>JDC</x><x>20151104</x><x>OUT</x>に変換されます:「!03」

DECLARE @test VARCHAR(100)='JDC!0320151104!03OUT'; 

SELECT CAST('<x>' + REPLACE(@test,'!03','</x><x>') + '</x>' AS XML).value('/x[2]','datetime') 

一つの利点は、入力された二つの間の値を取得することでした。この場合、あなたはそれ以上のキャストなしで「本物の」日時を返します。すべての場合に日付/時刻がない場合は、タイプとしてnvarchar(max)を使用します。

もう一つの利点だった:あなたがいる場合 - なぜ今までに - 後で他の値を必要とする、あなただけの.value('/x[1 or 3]'...)

+0

うわー、これは便利ですし、それらを持っています。私は次回このような問題に対処しているこのトリックを使ってみるつもりです。 – NonProgrammer

0

私は右の以下のようにして、それを得ることができました:

SELECT 
SUBSTRING(
    RegStatsID, 
    CHARINDEX('!', RegStatsID) + 3, 
    len(RegStatsID) - CHARINDEX('!', RegStatsID) - 2 - CHARINDEX('!', Reverse(RegStatsID)) 
) 
関連する問題