2016-12-08 6 views
0

以下のデータがあります。私はアンダースコアの間でデータを取得したいと思います。アンダースコアの両側のデータは任意の長さにすることができます。私は何千もの行を持つテーブルからこのデータを選択し、全体のクエリで選択されている量の他のデータになります。誰も助けてください。文字列内の2文字間のSQLデータの選択

列名は、私はすでに以下を使用して別の列の上にあるフィールドの左からデータを選択したd.ThirdPartyRef

2500_NEW_001 

です。

substring(d.ThirdPartyRef, 1, charindex('_', d.ThirdPartyRef)-1) as CarrierCode_DayNumber 

おかげ

+0

あなたが本当に何のデータベースを使用していますか?あなたの質問はMySQLにタグ付けされていますが、コードはSQL Serverのようです。コードが動作するという考えに基づいて、タグをsql-serverに変更しました。 –

+0

こんにちは、それは正しいです、そのSQLサーバー、変化のために歓声。 –

+0

2500_NEW_001からのあなたの予想どおりの結果?? –

答えて

0

あなたは値が正確に2つのアンダースコアが含まれますことを保証することができる場合:

DECLARE @ThirdPartyRef VARCHAR(50) 
SET @ThirdPartyRef = '2500_NEW_001' 

SELECT @ThirdPartyRef AS Value, 
     CHARINDEX('_',@ThirdPartyRef) AS FirstUnderscore, 
     CHARINDEX('_',@ThirdPartyRef,CHARINDEX('_',@ThirdPartyRef)+1) AS SecondUnderscore, 
     SUBSTRING(@ThirdPartyRef, CHARINDEX('_',@ThirdPartyRef) + 1, CHARINDEX('_',@ThirdPartyRef,CHARINDEX('_',@ThirdPartyRef)+1) - CHARINDEX('_',@ThirdPartyRef) - 1) AS Result 

結果:

/------------------------------------------------------------\ 
|  Value | FirstUnderscore | SecondUnderscore | Result | 
|--------------+-----------------+------------------+--------| 
| 2500_NEW_001 |  5  |   9  | NEW | 
\------------------------------------------------------------/ 

FirstUnderscoreSecondUnderscore列は、ただそこにありますソリューションの仕組みを示しています。

+0

3N1GM4は完璧です、ありがとう! –

1

あなたはParseName()

Declare @YourTable table (ID int,ThirdPartyRef varchar(500)) 
Insert Into @YourTable values 
(1,'2500_NEW_001'), 
(2,'2500_OLD_002') 

Select A.* 
     ,Pos1=ParseName(Replace(ThirdPartyRef,'_','.'),3) 
     ,Pos2=ParseName(Replace(ThirdPartyRef,'_','.'),2) 
     ,Pos3=ParseName(Replace(ThirdPartyRef,'_','.'),1) 
From @YourTable A 

を使用することができ返し

ID ThirdPartyRef Pos1 Pos2 Pos3 
1 2500_NEW_001 2500 NEW  001 
2 2500_OLD_002 2500 OLD  002 
+0

興味深いことに、前に 'PARSENAME'を見たことがありません - 最初の引数として渡された' sysname'を持つように設計されているので、意図した使い方ではないようです。しかし、この種の問題を解決するためのきちんとした方法のように見えますが、分割したい値に「個数」が4個以下であれば問題ありません。 – 3N1GM4

+1

@ 3N1GM4あなたは正しいですか?少し限られています。私は間違いなく私の解析関数を好むが、人々は速度と機能性にかかわらずUDFに抵抗する傾向がある。 –

関連する問題