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;