2017-10-30 4 views
0

I持って、次の表:のSQL Server 2008 R2:パターンマッチング文字列その逆

表:

CREATE TABLE str_matching 
(
    colstr varchar(200) 
); 

挿入データ:

INSERT INTO str_matching VALUES('5sXYZA1010B') 
INSERT INTO str_matching VALUES('A1010B') 
INSERT INTO str_matching VALUES('AMZ103B15K') 
INSERT INTO str_matching VALUES('B15K') 
INSERT INTO str_matching VALUES('XC101') 
INSERT INTO str_matching VALUES('C101') 
INSERT INTO str_matching VALUES('502KMD1FZ10009L') 
INSERT INTO str_matching VALUES('FZ10009L') 
INSERT INTO str_matching VALUES('A9L') 
INSERT INTO str_matching VALUES('XZ049L') 
INSERT INTO str_matching VALUES('LM101') 
INSERT INTO str_matching VALUES('9001') 
INSERT INTO str_matching VALUES('9001A') 

予想される出力:私だけ表示したいです1つの文字列が最後の文字列と一致した場合は、重複しているとみなしています。

シナリオ:1

例えば:私は2つの文字列

  1. 5sXYZA1010B
  2. A1010B

に第一列の末尾に一致している第二の文字列を持っているので、欲しいですそのようなレコードを表示する。

シナリオ:2

例えば:私は2つの文字列

  1. 9001
  2. 9001A

第二文字列の最初に一致している第一の文字列を持っているので、欲しいですそのようなレコードを表示する。

注::文字列の長さは固定されていませんが、いつでも一致することができます。

期待される結果:

colstr    
-------------------- 
5sXYZA1010B   
A1010B    
AMZ103B15K   
B15K     
XC101    
C101     
502KMD1FZ10009L  
FZ10009L  
9001 
9001A 

注:その逆のパターンマッチングをチェックする必要があります。 Martin Smithコードを1として

、私はに変更した:

SELECT DISTINCT CA.colstr 
FROM str_matching s1 
     JOIN str_matching s2 
     ON s1.colstr <> s2.colstr 
      AND s2.colstr LIKE '%' + s1.colstr 
      OR s1.colstr LIKE '%' + s2.colstr 
     CROSS APPLY (VALUES(s1.colstr), 
          (s2.colstr)) CA(colstr) 

しかし、文字列の特定のセットを取得できません。

答えて

0

これは私の作品:私はちょうど、結果を期待するだけでなく2つのレコードを取得していますので、

SELECT DISTINCT CA.colstr 
FROM str_matching s1 JOIN 
str_matching s2 
ON s1.colstr <> s2.colstr AND 
    (s1.colstr LIKE s2.colstr + '%' OR 
    s2.colstr LIKE '%'+ s1.colstr 
    ) CROSS APPLY 
(VALUES(s1.colstr), (s2.colstr)) as CA(colstr) ; 
0

あなたは自分のロジックを修正する必要があります。

SELECT DISTINCT CA.colstr 
FROM str_matching s1 JOIN 
    str_matching s2 
    ON s1.colstr <> s2.colstr AND 
     (s2.colstr LIKE s1.colstr + '%' OR 
     s1.colstr LIKE s2.colstr + '%' 
     ) CROSS APPLY 
    (VALUES(s1.colstr), (s2.colstr)) as CA(colstr) ; 

あなたは後方LIKEパターンを持っていたし、参加条件の周りに括弧を必要としていました。

+0

あなたは、あなたの変更について確認されています。 – MAK

+0

@MAK。 。 。あなたが求めている質問の実装と思われます。 –

関連する問題