【SQL Server】SELECT句に不等号を書くと「’>’ 付近に不適切な構文があります。」といわれる
問題
MySQLやPostgreSQLの感覚で、SQL Serverで以下のようなSQLを書いたら、「’>’ 付近に不適切な構文があります。」というエラーになりました。
SELECT 2 > 1;
'>' 付近に不適切な構文があります。
↓ これは大丈夫なんだけど、何で ↑ あれはだめなの?
SELECT 1 + 1;
2
答え
SQL Serverさんは、数値は返せるけど、真偽値は返せないらしい。
比較演算子の結果は Boolean 型になります。 有効値には、TRUE、FALSE、UNKNOWN があります。 Boolean 型を返す式は、ブール式とも呼ばれます。
Boolean データ型は SQL Server の他のデータ型と異なり、テーブルの列や変数のデータ型として指定することはできず、結果セットで返すこともできません。
MSDN: 比較演算子 (Transact-SQL)
IF や CASE式を使って、「trueなら1、falseなら0を返せ」という風に書くしかなさそうだ。
SELECT case when 2 > 1 then 1 else 0 end
とか
SELECT case when (COL1 = 1 or COL2 != 10) and (COL3 < 20 or COL4 < COL5) and COL6 = '01' then 1 else 0 end FROM T
といった感じ。
匿名 2017年8月20日 08:11
sql server 超絶 使いにくいな