0

所以,我在 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 以便我可以加入这些表吗?

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

4

5 回答 5

3

假设前缀和后缀总是相同的长度,只需这样做:

SUBSTRING(external_id, 6, 5)

如果你想看的话,文档SUBSTRING在这里。

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

SUBSTRING(external_id, CHARINDEX(external_id,'-') + 1, CHARINDEX(external_id,'.') - CHARINDEX(external_id,'-') + 1)
于 2013-11-08T16:38:40.757 回答
1

这也有效。:)

select LEFT(right(external_id, 7), 5)
from table_a
于 2013-11-08T16:45:15.527 回答
1

试试这个

SELECT *
FROM TABLE_A inner join TABLE_B on TABLE_A.external_id like '%'+TABLE_B.guarantor_id+'%'
于 2013-11-08T16:40:20.830 回答
0

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

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

于 2013-11-08T16:41:31.907 回答
0

使用子字符串和字符索引。只要您正在寻找第一个“-”和“。”之间的值。人物...

SUBSTRING (
           externalid,
           CHARINDEX('-',externalid)+1, 
           CHARINDEX('.',externalid)-CHARINDEX('-',externalid) 
          )
于 2013-11-08T16:45:05.407 回答