3

最近、MySQLからPostgreSQLに変更しました。Mysql'REGEXP'キーワードを持つクエリを除いて、ほとんどのクエリは翻訳されています。

MySQL (prepared statement):
SELECT * FROM table WHERE ? REGEXP identifier;

「テーブル」があり、列の1つは「識別子」と呼ばれます。この「識別子」列には、実際の正規表現パターンが含まれています。

したがって、クエリで正規表現パターンを「ハードコーディング」する代わりに、パターンの識別子列を検索します。

Postgresqlでは、「REGEXP」キーワード(MySQLのみ)の代わりに「〜」キーワードを使用する必要がありますが、Postgresqlでは列からパターンを抽出できないようです。

私は成功せずに次のクエリを試しました:

SELECT * FROM table WHERE 'test' ~ "identifier";
ERROR:  invalid regular expression: parentheses () not balanced


SELECT * FROM table WHERE "identifier" ~ 'test';
-> no results

テストの目的で、「識別子」列に値(すべてに一致する正規表現)として「。*」が含まれるレコードをいくつか作成しましたが、それでも適切な結果が得られません。

ヘルプは大歓迎です、ありがとう!

4

1 に答える 1

3

おそらく問題は正規表現文字列の1つにありますか?(エラー文字列が言うように)

私はテストしました

SELECT *
FROM table1 t
WHERE 'cat' ~ t.reg;

そしてそれは私のために働きます。これが私のSQLフィドルです。http://sqlfiddle.com/#!12/f245c/3

問題は、異なる正規表現の解釈にある可能性があります。postgresql正規表現の詳細はこちらhttp://www.postgresql.org/docs/current/static/functions-matching.html

UPD postgresql文字列の詳細については、http: //www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGSもお読みください。正規表現を正しく書き込むためにこれが必要です。

于 2012-11-26T12:38:56.820 に答える