SQL LIKE条件检查整数?

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

SELECT * FROM books WHERE title ILIKE "A%" 

这对信件来说很好,但是如何列出以任何数字开头的所有项目? 对于这是值得的这是在Postgres数据库。

这将select(通过正则expression式)每一本书的标题以数字开头,是你想要的?

 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; 

PostgreSQL支持正则expression式匹配 。

所以,你的例子看起来像

 SELECT * FROM books WHERE title ~ '^\d+ ?' 

这将匹配以一个或多个数字和可选空间开始的标题

假设你正在寻找“以7开头的数字”而不是“以7开头的string”,可能类似于

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

或者任何Postgres相当于转换。

哪一个是可索引的?

这绝对是可以索引的:

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

请注意,':'在ASCII码“9”之后。

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

如果你想searchstring,你可以像这样转换成文本:

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

我迟到了,但是如果你正在处理固定长度的整数,你可以做整数比较:

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