2017-10-05 6 views
0

私は、次のクエリを実行しようとしています:PostgreSQL - varcharをintにキャストしていますか?

DELETE FROM table_name WHERE ID>9; 

しかし、私にはできない「ID」フィールドは、型「varchar型」であるため。 どうすれば 'int'にキャストし、正しく動作させることができますか? (数字varcharの値に変換するのではなく、の行をすべて削除する)

+1

'IDから削除する:ID:int> 9;' –

+3

'ID'を数値として扱う必要がある場合は、テキストではなく数値列に格納することを検討してください。 –

+0

最初の解決策を試してみましたが、整数の入力構文が無効です: "" – Gambit2007

答えて

3

数値を文字列として保存する理由はわかりません。これは、テーブルから最初は0ない2桁で始まるあらゆるidを削除します

DELETE FROM table_name 
    WHERE regexp_matches(ID, '^[1-9][0-9]'); 

:あなたはより多くのような何かをしたいかもしれません。変換を試みると、すべてのIDが数字でない場合は変換エラーが発生する可能性があります。これは、intをオーバフローさせる長い数値に対しても機能します(numericはその問題を解決します)。

EDIT:一般的な解決のために

、私は私のようにそれを書くと思います:

where (case when regexp_matches(id, '^[0-9]+$') 
      then id::numeric 
     end) > 70000 

caseが非数値id S上の任意のエラーを回避する必要があります。

+0

私は他人のプロジェクトに取り組んでいます。私はあなたのソリューションを本当に理解していませんでしたが、どうすればそれを一般化できますか? 「WHERE ID> 70000」のように – Gambit2007

関連する問題