我正在使用一组SQL LIKE条件来浏览字母表并列出以相应字母开头的所有项目,例如获得标题以字母“A”开头的所有书籍:
SELECT * FROM books WHERE title ILIKE "A%"
这对于字母很好,但如何列出以任何数字开头的所有项目?对于它的价值,这是在Postgres DB上。
答案 0 :(得分:122)
那将选择(通过正则表达式)每本书的标题都以数字开头,是你想要的吗?
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 :(得分:15)
PostgreSQL支持regular expressions matching。
所以,你的例子看起来像是
SELECT * FROM books WHERE title ~ '^\d+ ?'
这将匹配以一个或多个数字和可选空格开头的标题
答案 2 :(得分:1)
假设您正在寻找“以7开头的数字”而不是“以7开头的字符串”,可能就像
select * from books where convert(char(32), book_id) like '7%'
或者Postgres相当于转换的是什么。
答案 3 :(得分:1)
如果您想搜索为字符串,可以转换为如下文本:
SELECT * FROM books WHERE price::TEXT LIKE '123%'
答案 4 :(得分:1)
我在这里参加派对很晚,但是如果你要处理固定长度的整数,你可以进行整数比较:
SELECT * FROM books WHERE price > 89999 AND price < 90100;
答案 5 :(得分:1)
在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]+';
答案 6 :(得分:0)
哪一个是可索引的?
这个肯定是btree-indexable:
WHERE title >= '0' AND title < ':'
请注意,':'在ASCII中的'9'之后。
答案 7 :(得分:0)
在PostreSQL中,您可以使用 SIMILAR TO 运算符(more):
-- only digits
select * from books where title similar to '^[0-9]*$';
-- start with digit
select * from books where title similar to '^[0-9]%$';