使用以下查询时,我收到上述错误
SELECT b.*,E.SSNO
FROM [SRV-RVS].[dbo].[CARD] b
INNER JOIN [SRV-RVS].dbo.EMP e
on b.EMPID=E.SSNO
WHERE E.SSNO LIKE 't%'
我正在尝试加入两个表,这里我的EMPID与SSNO相同,但它在开头就有了一个字符。
希望你明白了
此致
答案 0 :(得分:1)
您可以将EMPID
转换为varchar
,并在join子句中添加'T'
字符。
SELECT b.*,E.SNO
FROM [SRV-RVS].[dbo].[CARD] b INNER JOIN [SRV-RVS].dbo.EMP e ON ('T' + REPLACE(STR(CAST(b.EMPID as varchar(9)), 9), SPACE(1), '0')) = E.SSNO
WHERE E.SNO LIKE 't%'
附加说明
-
列中存储了SSNO
等掩码/空格字符,则此代码将无效。再次(从上一个项目继续),更改架构或添加计算列。目前这是一个糟糕的设计。
答案 1 :(得分:1)
修复您的表格,以便您可以进行加入。本答案的其余部分假定您使用的是SQL Server(基于问题中代码的语法)。
我鼓励你这样做:
alter table emp
add column ssno as ( cast(stuff(empid, 1, 1, '') as int) );
或任何类型匹配。你甚至可以建立一个索引。
然后,您的代码无需记住有关empid
和ssno
之间关系的业务规则。
答案 2 :(得分:1)
通过从字符串中提取数值来加入表,因此它将匹配Id列。它应该返回结果,因为你在dddd中有任何其他惊喜。这通过在开头消除字符来起作用。
SELECT b.*,E.SSNO
FROM [SRV-RVS].[dbo].[CARD] b
INNER JOIN [SRV-RVS].dbo.EMP e
on right(b.EMPID, len(b.EMPID) - (PatIndex('%[0-9]%', b.EMPID )-1) )
=right(E.SSNO, len(E.SSNO) - (PatIndex('%[0-9]%', E.SSNO )-1) )