0

次の問題があります。

SELECT ....
FROM  .... 
WHERE "Phonenumber" LIKE '123456789'
  AND "*****" IS NOT NULL

私の状況では、これらの数値をテキスト ファイルから読み取っています。これらの数字は「123456789」のように書かれていますが、私の Postgres データベースではパターンは「1234-56789」のようになっています。

上記のステートメントはエラーを生成しませんが、データセットも生成しません。ということで、数字の間の「-」を無視する文をどう書けばいいのだろうと考えていました。

正規表現を試しましたが、自分のニーズに合った解決策が見つかりませんでした。

4

3 に答える 3

2

REPLACE関数を使用して、ダッシュを取り除くことができます。

SELECT ...
FROM ...
WHERE REPLACE("Phonenumber", '-', '') LIKE '123456789'
AND ...

または、テキスト ファイルの文字列を処理し、4 番目と 5 番目の数字の間にダッシュを挿入してから、それらを SQL クエリに使用します。

免責事項: 私は PostgreSQL の構文に詳しくないため、上記のクエリは正確ではない可能性があります (質問の SQL からヒントを得ました)。

于 2013-10-16T09:57:46.183 に答える
0

ダッシュが 4 桁目の後にあり、その後に 5 桁が続く行を取得するには、次のようにします。

where "Phonenumber" ~ '[0-9]{4}-[0-9]{5}'

-が真ん中にある行を取得するには:

where "Phonenumber" ~ '[0-9]+-[0-9]+'

(つまり、少なくとも 1 桁、次にダッシュ、次に少なくとも 1 桁)

于 2013-10-16T10:00:11.273 に答える