是否可以在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