6

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
4

2 回答 2

9

这是您在DataType Precedence之后的列表

在您的示例中:

WHERE quantity > '3'

'3' 被强制转换为 int,匹配数量

WHERE quantityTest > 3

无需铸造

WHERE date = 20120101

20120101作为一个数字被转换为一个太大的日期。例如

select cast(20120101 as datetime)

这不同于

WHERE date = '20120101'

可以将日期作为字符串转换的地方。

如果您将CAST 和 CONVERT 引用的三分之一转到隐式转换部分,则有一个允许的隐式转换表。仅仅因为它被允许并不意味着它会起作用,例如(20120101 -> datetime)。

于 2012-11-08T21:20:58.820 回答
6

MSDN 上有一个图表(如下所示),它显示了 SQL Server 系统提供的数据类型所允许的所有显式和隐式数据类型转换。它还解释了不允许的转换等。

它解释了

-Explicit Conversions
-Implicit Conversions
-Conversions not allowed
...

数据类型转换表sql

于 2012-11-08T21:45:10.317 回答