我的问题非常简单,所以我会在不制作任何虚拟表格的情况下尝试询问。
考虑我有两个表的情况:A和B.
假设A有varchar
列AVar
,AVar
中的每个元素都是一个不以0
开头的整数字符串。
另外假设B有varchar
列BVar
,BVar
的元素与AVar
中的条目相同,但有1或2个0
{1}}在每个条目前面。
例如" 123454"在AVar会有一个相应的" 0123454"或" 00123454"在BVar
当我执行以下查询时,我发现我的连接成功运行,即使两个表中的varchar
元素在技术上不是相同的字符串值。
引擎盖下发生了什么让这种比较放松了?
SELECT
A.AVar, B.BVar
FROM
A
LEFT JOIN
B ON A.AVar = B.BVar
答案 0 :(得分:2)
Sql Server执行隐式转换
此
select * from (
select 1 a , '00001' b union all
select 1 a , '1' b ) x
where x.b = x.a
产生
a b
1 00001
1 1
虽然这个
select * from (
select 1 a , '00001' b union all
select 1 a , '1' b ) x
where x.b like x.a
产生
a b
1 1
答案 1 :(得分:0)
您只需使用CONVERT()
或CAST()
方法即可。见下文:
使用CONVERT()
:
SELECT
CONVERT(NUMERIC,A.AVar)A.AVar,
CONVERT(NUMERIC,B.BVar)B.AVar
FROM A LEFT JOIN B
ON A.AVar = B.BVar
使用CAST()
:
SELECT
CAST(A.AVar AS NUMERIC)A.AVar,
CAST(B.BVar AS NUMERIC)B.AVar
FROM A LEFT JOIN B
ON A.AVar = B.BVar