SQL LIKE条件检查整数?

时间:2009-11-05 23:06:19

标签: sql postgresql

我正在使用一组SQL LIKE条件来浏览字母表并列出以相应字母开头的所有项目,例如获得标题以字母“A”开头的所有书籍:

SELECT * FROM books WHERE title ILIKE "A%"

这对于字母很好,但如何列出以任何数字开头的所有项目?对于它的价值,这是在Postgres DB上。

8 个答案:

答案 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]%$';