SQL Server和类型的隐式转换

时间:2012-11-08 20:49:59

标签: sql sql-server

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

2 个答案:

答案 0 :(得分:9)

这是您DataType Precedence

之后的列表

在您的示例中:

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
...

Data type conversion table sql