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)
这是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).
MSDN上有一个图表(也显示在下面),它显示了SQL Server系统提供的数据类型允许的所有显式和隐式数据类型转换.它还解释了不允许的转换等.
它解释说
-Explicit Conversions
-Implicit Conversions
-Conversions not allowed
...
Run Code Online (Sandbox Code Playgroud)