ITのえんぴつ

Google Blockly開発者ツールやIT・プログラミングを研究して発信するブログ

PosgreSQLで「SQL : operator does not exist: character varying = numeric」が出た時の対処法

サンプル

f:id:eigo-gayomenai-engineer:20220204103600p:plain

環境

  • pgAdmin 6.1
  • PostgresSQL 14.1
  • windows 10 Pro 64bit

エラーメッセージ

f:id:eigo-gayomenai-engineer:20220204103624p:plain

pgAdmin の場合

pgAdminは、PostgreSQLGUI管理ツールです。以下のように、表示されます。

ERROR: 演算子が存在しません: character varying = integer

HINT: 指定した名称と引数の型に合う演算子がありません。明示的な型キャストが必要かもしれません。

psqlの場合

また、PostgreSQLコマンドライン型のツールであるpsqlを利用した場合は、以下のように、表示されます。

SQL : operator does not exist: character varying = numeric

SQL演算子は存在しません:文字の変化=数値

原因

エラーの原因は、SQLのWHERE句で、文字列を数値と比較しようとしていたため。SQLは文字列を数値として、直接認識できないため、比較はできません。

対処法

データ型を合わせることで解決します。今回は3つの方法をご紹介します。今回の場合は、1つめのシングルクォーテーション(')の書く場合が多いかと思います。

1 シングルクォーテーション(')

f:id:eigo-gayomenai-engineer:20220204103641p:plain

値が引用符で囲まれている場合は、文字列として表示されます。そうでない場合は、数値にとして表示されます。

2 CAST関数

f:id:eigo-gayomenai-engineer:20220204103654p:plain

SQLに準拠したものです。

3 ::演算子

f:id:eigo-gayomenai-engineer:20220204103647p:plain

CAST関数と同等の構文です。PostgreSQLで伝統的に使用されている方法です。

参考