2017-10-05 56 views
0

预先感谢您。如何找到一个字符串的一部分,并在该部分的字符串上进行连接?

我有一个表1:

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 
ABC-00    || THYW.A 
ABC054321-10    || UJNC.E 
ABC098765-01    || QTHB.P 
ABC067890-00    || OMYB.Y 
ABC024680-00    || EVHO.N 
ABC012678-01    || IUTO.N 

我需要的输出表:

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中的ID,那么我需要更新列输出 as Success

这是更新查询我写:

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

你可以添加在输出失败的样本数据。 –

回答

1

你也可以简单地只使用Left JoinSubstring()功能如下:

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 
相关问题