SQL Server在哪里做隐式转换,遵循什么规则?IE什么时候将相等运算符的左侧转换为右侧?
富吧 id int 不为空 数量 int 不为空 数量测试字节不为空 日期 varchar(20) 不为空 日期测试日期时间
SELECT id
FROM Foobar
WHERE quantity > '3'
SELECT id
FROM foobar
WHERE quantityTest > 3
Select id
FROM foobar
WHERE date = 20120101
SQL Server在哪里做隐式转换,遵循什么规则?IE什么时候将相等运算符的左侧转换为右侧?
富吧 id int 不为空 数量 int 不为空 数量测试字节不为空 日期 varchar(20) 不为空 日期测试日期时间
SELECT id
FROM Foobar
WHERE quantity > '3'
SELECT id
FROM foobar
WHERE quantityTest > 3
Select id
FROM foobar
WHERE date = 20120101
在您的示例中:
WHERE quantity > '3'
'3' 被强制转换为 int,匹配数量
WHERE quantityTest > 3
无需铸造
WHERE date = 20120101
20120101作为一个数字被转换为一个太大的日期。例如
select cast(20120101 as datetime)
这不同于
WHERE date = '20120101'
可以将日期作为字符串转换的地方。
如果您将CAST 和 CONVERT 引用的三分之一转到隐式转换部分,则有一个允许的隐式转换表。仅仅因为它被允许并不意味着它会起作用,例如(20120101 -> datetime)。
MSDN 上有一个图表(如下所示),它显示了 SQL Server 系统提供的数据类型所允许的所有显式和隐式数据类型转换。它还解释了不允许的转换等。
它解释了
-Explicit Conversions
-Implicit Conversions
-Conversions not allowed
...