SQL - 使用已修改的数据连接表

时间:2013-11-08 16:35:22

标签: sql sql-server-2008

因此,我在SQL Sever 2008 R2中有两个表:

 Table A:

 patient_id   first_name   last_name   external_id
 000001       John         Smith       4753-23314.0
 000002       Mike         Davis       4753-12548.0

 Table B:

 guarantor_id   visit_date   first_name   last_name
 23314          01/01/2013   John         Smith
 12548          02/02/2013   Mike         Davis

请注意,表B中的guarantor_id与表A中external_id的中间部分匹配。有人请帮我从前面剥离4753-,从external_id后面剥离.0所以我可以加入这些表吗?

非常感谢任何帮助/示例。

5 个答案:

答案 0 :(得分:3)

假设前缀和后缀的长度始终相同,只需执行以下操作:

SUBSTRING(external_id, 6, 5)

SUBSTRING的文档是here,如果你想看一下。

如果前缀和后缀发生变化,也请使用CHARINDEX AND LEN

SUBSTRING(external_id, CHARINDEX(external_id,'-') + 1, CHARINDEX(external_id,'.') - CHARINDEX(external_id,'-') + 1)

答案 1 :(得分:1)

试试这个

SELECT *
FROM TABLE_A inner join TABLE_B on TABLE_A.external_id like '%'+TABLE_B.guarantor_id+'%'

答案 2 :(得分:1)

这也有效。 :)

select LEFT(right(external_id, 7), 5)
from table_a

答案 3 :(得分:0)

正如@woz所说,你可以使用SUBSTRING,如果长度不固定,你可以使用CHARINDEX函数来确定点和破折号的位置,使其更加灵活。

另外请注意,基于函数的加入会严重降低您的性能,我建议使用函数结果更新字段,或者创建一个具有剥离值的新列STRIPPED_GUARANTOR_ID,然后加入该列

答案 4 :(得分:0)

使用substring和charindex。只要你在寻找第一个' - '和'。'之间的值。字符...

SUBSTRING (
           externalid,
           CHARINDEX('-',externalid)+1, 
           CHARINDEX('.',externalid)-CHARINDEX('-',externalid) 
          )