SOFTELメモ

Softel Inc.

【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)

http://msdn.microsoft.com/ja-jp/library/ms188074.aspx

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

といった感じ。

関連するメモ

コメント(1)

匿名 2017年8月20日 08:11

sql server 超絶 使いにくいな