SQL Server在哪里进行隐式转换,它遵循的规则是什么? I.E何时将相等运算符的左侧转换为右侧?
Foobar id int not null quantity int not null quantityTest byte not null date varchar(20) not null dateTest datetime
SELECT id
FROM Foobar
WHERE quantity > '3'
SELECT id
FROM foobar
WHERE quantityTest > 3
Select id
FROM foobar
WHERE date = 20120101
答案 0 :(得分:9)
在您的示例中:
WHERE quantity > '3'
'3'被转换为int,匹配数量
WHERE quantityTest > 3
不需要施法
WHERE date = 20120101
20120101 作为数字被投射到一个太大的日期。 e.g。
select cast(20120101 as datetime)
这与
不同WHERE date = '20120101'
可以投射日期作为字符串。
如果您将CAST and CONVERT reference的三分之一下移到隐式转化部分,则会有一个允许的隐式转换表。仅仅因为它被允许并不意味着它会起作用,例如(20120101 - > datetime)。
答案 1 :(得分:5)
图表here on MSDN(也显示如下)显示了SQL Server系统提供的数据类型允许的所有显式和隐式数据类型转换。它还解释了不允许的转换等。
它解释了
-Explicit Conversions
-Implicit Conversions
-Conversions not allowed
...