2017-10-05 19 views
0

ありがとうございます。文字列の一部を見つけて、文字列のその部分を結合する方法は?

私はTABLE1を持っている:

ID      || Location 
ABC-999-8710-12345-000 || THYW.A 
ABC-900-8560-54321-100 || UJNC.E 
ABC-997-0090-98765-010 || QTHB.P 
ABC-923-2340-67890-001 || OMYB.Y 
ABC-009-8000-24680-000 || EVHO.N 
ABC-009-8000-26954-010 || IUTO.N 

私は別の表2持っている:私はの一部を取る必要があり

ID      || Location || OutPut 
ABC-999-8710-12345-000 || THYW.A  || Success 
ABC-900-8560-54321-100 || UJNC.E  || Success 
ABC-997-0090-98765-010 || QTHB.P  || Success 
ABC-923-2340-67890-001 || OMYB.Y  || Success 
ABC-009-8000-24680-000 || EVHO.N  || Success 
ABC-009-8000-26954-010 || IUTO.N  || 

:として私は、出力テーブルを必要とする

ID      || Location 
ABC-00    || THYW.A 
ABC054321-10    || UJNC.E 
ABC098765-01    || QTHB.P 
ABC067890-00    || OMYB.Y 
ABC024680-00    || EVHO.N 
ABC012678-01    || IUTO.N 

を文字列とそれがテーブル2のIDと一致する場合は、私は列を更新する必要があります出力として成功

これは私が書かれている更新クエリです:文字列を抽出し、それらを結合するサブストリング

update INT 
set Output= 'Success' 
FROM 
[dbo].[table1] INT 
join [dbo].[table2] SHB 
on INT.ID=SHB.ID 
+0

あなたは出力に失敗したサンプルデータを追加することができます。 –

答えて

1

のためにそれをしたい場合にも、単純に次のようにSubstring()機能付きLeft Joinを使用することができます。

SELECT T.ID, 
     T.Location, 
     CASE 
      WHEN T1.Location IS NULL 
      THEN '' 
      ELSE 'Success' 
     END AS 'Update' 
FROM 
(
    SELECT * 
    FROM table1 
) T 
LEFT JOIN table2 T1 ON SUBSTRING(T1.ID, 5, 5) = SUBSTRING(T.ID, 14, 5); 

あなたUpdate Queryは、次のように次のようになります。

UPDATE INT SET INT.Output = CASE 
      WHEN SHB.Location IS NULL 
      THEN '' 
      ELSE 'Success' 
     END 
FROM table1 INT 
LEFT JOIN table2 SHB ON SUBSTRING(SHB.ID, 5, 5) = SUBSTRING(INT.ID, 14, 5); 

望ましい結果:

ID      || Location || OutPut 
ABC-999-8710-12345-000 || THYW.A  || Success 
ABC-900-8560-54321-100 || UJNC.E  || Success 
ABC-997-0090-98765-010 || QTHB.P  || Success 
ABC-923-2340-67890-001 || OMYB.Y  || Success 
ABC-009-8000-24680-000 || EVHO.N  || Success 
ABC-009-8000-26954-010 || IUTO.N  || 
2

使用します。

update INT 
    set Output= 'Success' 
    join [dbo].[table2] SHB 
    on concat(substring(INT.ID,1,3), '0', substring(INT.ID,14,8))=SHB.ID 
2

このクエリを使用できます。

仮定 - 表1のIDパターンは同じです。

SELECT a.ID, b.Location, 
CASE WHEN b.Location IS NOT NULL 
    THEN 'Success' ELSE 'Failed' END as Output 
FROM table1 a 
    LEFT JOIN table2 b 
     ON LEFT(a.ID,3) + '0' + SUBSTRING(a.ID,14,5) + 
        SUBSTRING(a.ID,19,3) = b.ID 

あなたが更新クエリのみ

UPDATE a 
    SET Output = (CASE WHEN b.Location IS NOT NULL 
     THEN 'Success' ELSE 'Failed' END) 
      FROM table1 a 
     LEFT JOIN table2 b 
      ON LEFT(a.ID,3) + '0' + SUBSTRING(a.ID,14,5) + 
         SUBSTRING(a.ID,19,3) = b.ID 
関連する問題