PostgreSQLでは以上、以下(=>、=<)が使えない!?
研修中に新人から「PostgreSQLで以上、以下が使えません」と質問がありました。
もちろんPostgreSQLで使えるのですが、こういうところで引っ掛かるんですね、ということで今回Qiitaの記事にしてみました。
なお、「新人に悲観ロックによる排他制御を体験してもらう」という記事も書いています。興味があればこちらも参照いただければと思います。
- 「以上」を抽出条件とするSQL
以上のSQL
SELECT * FROM customer
WHERE customer_birth => to_date('2017/01/01', 'yyyy/MM/dd')
エラーになります
ERROR: 演算子が存在しません: date => date
LINE 2: WHERE customer_birth => to_date('2017/01/01', 'yyyy/MM/dd')
^
HINT: 指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません
********** エラー **********
ERROR: 演算子が存在しません: date => date
SQLステート:42883
ヒント:指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません
文字:45
- 「以下」を抽出条件とするSQL
以下のSQL
SELECT * FROM customer
WHERE customer_birth =< to_date('2017/01/01', 'yyyy/MM/dd')
エラーになります
ERROR: 演算子が存在しません: date =< date
LINE 2: WHERE customer_birth =< to_date('2017/01/01', 'yyyy/MM/dd')
^
HINT: 指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません
********** エラー **********
ERROR: 演算子が存在しません: date =< date
SQLステート:42883
ヒント:指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません
文字:45
PostgreSQLにおける「以上」「以下」の正しい書き方
PostgreSQLでは以上は「>=
」、以下は「<=
」を利用します。
等号(=
)が後で、不等号(>、<
)が前になるので注意しましょう。
- 「以上」を抽出条件とするSQL
正しい以上のSQL
SELECT * FROM customer
WHERE customer_birth >= to_date('2017/01/01', 'yyyy/MM/dd')
- 「以下」を抽出条件とするSQL
正しい以下のSQL
SELECT * FROM customer
WHERE customer_birth <= to_date('2017/01/01', 'yyyy/MM/dd')