因此,我在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所以我可以加入这些表吗?
非常感谢任何帮助/示例。
答案 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)
)