0

人に関する多くのデータを含む「応答」という列があります。

特定の文字列の後の情報のみを返したい

しかし、以下の方法を使用すると、IQ が 100 未満の場合に | が得られることがあります。必要な番号の直後に来ます..

「PersonIQ=」の後に任意の文字が必要ですが、パイプの前にのみ必要です。

これを達成する最善の方法がわかりません。

クエリの速度は懸念事項であり、ネストされた CASE の私の考えはおそらく最善の解決策ではありません。

アドバイスをいただければ幸いです。ありがとう

substring(response,(charindex('PersonIQ=',response)+9),3)
4

2 に答える 2

0

常にパイプがあると仮定すると、次のようにすることができます。

substring(stuff(reponse,1,charindex('PersonIQ=',reponse)-1,''),1,charindex('|',stuff(reponse,1,charindex('PersonIQ=',reponse)-1,''))-1)

または、文字列を xml に変換して PersonIQ を直接参照することもできます。

--assuming your string looks something like this..
declare @s varchar(max) = 'asdaf=xxx|PersonIQ=100|xxx=yyy'

select convert(xml, '<x ' + replace(replace(@s, '=', '='''), '|', ''' ') + '''/>').value('(/x/@PersonIQ)[1]','int')
于 2015-04-25T23:25:19.213 に答える