SQL LIKE条件检查整数?


80

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

SELECT * FROM books WHERE title ILIKE "A%"

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

Answers:


154

这将(通过正则表达式)选择每本以数字开头的书名的书,这就是您想要的吗?

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。”
吉拉德(Gilad)

1
如果选项2返回上面的注释中提到的显式转换错误(可能在SQL Server和其他程序中发生),请尝试使用具有足够大的最大大小的VARCHAR:SELECT * FROM books WHERE CAST(price as VARCHAR(20))就像'%123%'
bstrong

非常感谢你!我可以加5分钱:您还可以使用:[...] CAST(价格文本)〜*'123%',使用运算符〜*。您也可以在其中使用任何正则表达式,例如:[...] CAST(价格为文本)〜*'^ 123 \-?456 $'
Arsenii,


5

如果要搜索为字符串,则可以将其转换为以下文本:

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

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]+';

1

假设您要查找的是“以7开头的数字”,而不是“以7开头的字符串”

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

或与convert等效的Postgres。


0

哪一个是可索引的?

这绝对是btree可索引的:

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] * $';
查理木匠

似乎PostgreSQL 9.5中SIMILAR TO不能与“ ^”配合使用;POSIX正则表达式“〜”有效。
查理·木匠
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.