整数をチェックするSQLLIKE条件?


83

SQL LIKE条件のセットを使用して、アルファベットを調べ、適切な文字で始まるすべてのアイテムを一覧表示します。たとえば、タイトルが文字「A」で始まるすべての本を取得します。

SELECT * FROM books WHERE title ILIKE "A%"

文字の場合は問題ありませんが、任意の番号で始まるすべてのアイテムを一覧表示するにはどうすればよいですか?これが価値があるのは、PostgresDBです。

回答:


161

それは(正規表現によって)数字で始まるタイトルを持つすべての本を選択します、それはあなたが望むものですか?

SELECT * FROM books WHERE title ~ '^[0-9]'

特定の数字で始まる整数が必要な場合は、次を使用できます。

SELECT * FROM books WHERE CAST(price AS TEXT) LIKE '123%'

または使用します(すべての数値の桁数が同じ場合(制約が役立つ場合))

SELECT * FROM books WHERE price BETWEEN 123000 AND 123999;

1
op2を試すと、「データ型intからtextへの明示的な変換は許可されていません」というメッセージが表示されます。
ギラッド2011

1
オプション2が上記のコメントに記載されている明示的な変換エラーを返す場合(SQL Serverおよびおそらく他のプログラムで発生する可能性があります)、十分に大きい最大サイズでVARCHARを使用してみてください。SELECT* FROM books WHERE CAST(price AS VARCHAR(20)) LIKE '%123%'
bstrong 2017年

どうもありがとうございました!5ペニーを追加できます:次も使用できます:[...] CAST(price AS TEXT)〜* '123%'演算子〜*を使用します。' - 456 $ ^ 123 \?' [...] CAST(TEXT AS価格)〜*:また、あなたのような、そして内部の任意の正規表現を使用することができます
Arsenii


6

文字列として検索する場合は、次のようにテキストにキャストできます。

SELECT * FROM books WHERE price::TEXT LIKE '123%'

2

「7で始まる文字列」ではなく「7で始まる数字」を探しているとすると、次のようになります。

select * from books where convert(char(32), book_id) like '7%'

または、Postgresのconvertに相当するものは何でも。


2

私はここでパーティーに遅れていますが、固定長の整数を扱っている場合は、整数の比較を行うことができます。

SELECT * FROM books WHERE price > 89999 AND price < 90100;

2

PostgreSQL 9.5でテスト済み:

-数字のみ

select * from books where title ~ '^[0-9]*$';

または、

select * from books where title SIMILAR TO '[0-9]*';

-数字で始まります

select * from books where title ~ '^[0-9]+';

0

それらのどれがインデックス可能ですか?

これは間違いなくbtree-indexableです:

WHERE title >= '0' AND title < ':'

ASCIIでは「:」は「9」の後に続くことに注意してください。


0

PostreSQLでは、SIMILAR TO演算子(詳細)を使用できます。

-- only digits
select * from books where title similar to '^[0-9]*$';
-- start with digit
select * from books where title similar to '^[0-9]%$';

1
数字のみ:タイトル〜 '^ [0-9] * $';
チャーリー木継

SIMILARTOがPostgreSQL9.5の「^」で機能していないようです。POSIX正規表現「〜」は機能します。
チャーリー木継
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.