SQL Server和类型的隐式转换

gh9*_*gh9 6 sql sql-server

SQL Server在哪里进行隐式转换,它遵循的规则是什么?IE什么时候在右侧转换相等运算符的左侧?

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
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 9

这是DataType Precedence之后的列表

在你的例子中:

WHERE quantity > '3'
Run Code Online (Sandbox Code Playgroud)

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

WHERE quantityTest > 3
Run Code Online (Sandbox Code Playgroud)

不需要铸造

WHERE date = 20120101
Run Code Online (Sandbox Code Playgroud)

20120101 作为一个数字被投射到一个日期,这是太大了.例如

select cast(20120101 as datetime)
Run Code Online (Sandbox Code Playgroud)

这不同于

WHERE date = '20120101'
Run Code Online (Sandbox Code Playgroud)

可以投射作为字符串的日期.

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


Kaf*_*Kaf 5

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

它解释说

-Explicit Conversions
-Implicit Conversions
-Conversions not allowed
...
Run Code Online (Sandbox Code Playgroud)

数据类型转换表sql