2016-04-28 3 views
0

私はAAAA-NNN-AAAという形式の一連の識別子を持っています。ジョインでのSQL Serverパターンマッチング

NNN内の2番目または3番目の位置にそれぞれのNNNに1,2または3が含まれている場合、これを識別子の別のテーブルに追加したいと考えています。

だから、ABCD-010はABCD-121またはABCD-003

をABCD-010またはABCD-011またはABCD-001などと一致しなくなり、私は明らかにLikePATINDEXを見てみましたが、あったのか疑問に思っ標準的な「効率的な」方法?あなたが達成することができますどのような方法の

+0

だから、 'NNN'最初の桁は常に0になりますか? 'AAAA-NNN-AAA'フォーマットを提供しましたが、サンプルデータには' ABCD-010'のような 'AAAA-NNN'しかありません。より多くのサンプルデータを提供し、より正確にしてください。 –

+0

NNN内の2番目または3番目の位置1,2または3に質問がありますか? '%1%'のようなSUBSTRING(val、6,3)のようなものは私のために働くでしょう - もっと良い方法があるかどうか疑問に思いました。 – bhs

答えて

0

一つであり、このような何か:

create table #t1 
(
    id nvarchar(max) 
) 
create table #t2 
(
    id nvarchar(max) 
) 
insert into #t1 values('ABCD-010') 
insert into #t2 values('ABCD-021') 

select * 
from #t1 t1 
join #t2 t2 on left(t1.id,4) = left(t2.id,4) 
    and (cast(right(t2.id, 1) as int) in (1,2,3) or cast(left(right(t2.id, 2),1) as int) in (1,2,3)) 
+0

私は最後に部分文字列メソッドを使用しましたが、これも同様に有効です。あなたのご意見ありがとうございます。 – bhs