是否可以在CONVERT或CAST函数中使用比较运算符?为什么不在CONVERT中进行比较?
我有看起来像这样的声明:
SELECT
...
CASE field
WHEN 'Y' THEN 1 # If Y then True
ELSE 0 # Anything else is False
END
...
FROM ...
类似的事情发生了几场,所以我想将其更改为一个较短的版本:
SELECT
...
CONVERT(BIT, field = 'Y')
...
FROM ...
但MSSQL给出了一个错误Incorrect syntax near '='.
我的帮助解释是它应该工作:
CONVERT (data_type [ (length) ] , expression [ , style ])
expression: expression { binary_operator } expression
binary_operator
:是定义的方式组合两个表达式,以产生一个结果的运算符。 binary_operator可以是算术运算符,赋值运算符(=),位运算符,比较运算符,逻辑运算符,字符串拼接运算符(+)或一元运算符。comparison operator: (= | > | < | >= | <= | <> | != | !< | !>)
我跑了几个测试,并得到了这些结果:
SELECT CONVERT(BIT, 0) // 0
SELECT CONVERT(BIT, 1) // 1
SELECT CONVERT(BIT, 1+2) // 1
SELECT CONVERT(BIT, 1=2) // Error
SELECT CONVERT(BIT, (1=2)) // Error
SELECT CONVERT(BIT, (1)=(2)) // Error
field ='Y'是一个赋值,而不是表达式。在任何情况下,位数据类型只能包含0或1. CASE语句是正确的,因为它在field ='Y'时指定1。 – 2012-01-06 03:36:00