SQL LIKE条件检查整数?

Way*_*rts 63 sql postgresql

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

SELECT * FROM books WHERE title ILIKE "A%"
Run Code Online (Sandbox Code Playgroud)

这对于字母来说很好,但是如何列出以任何数字开头的所有项目?值得一提的是Postgres数据库.

Joh*_*iss 132

那将选择(通过正则表达式)每一本标题都以数字开头的书,是你想要的吗?

SELECT * FROM books WHERE title ~ '^[0-9]'
Run Code Online (Sandbox Code Playgroud)

如果你想要以特定数字开头的整数,你可以使用:

SELECT * FROM books WHERE CAST(price AS TEXT) LIKE '123%'
Run Code Online (Sandbox Code Playgroud)

或者使用(如果你的所有数字都有相同的数字位数(那么约束就会有用))

SELECT * FROM books WHERE price BETWEEN 123000 AND 123999;
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*vic 16

PostgreSQL支持正则表达式匹配.

所以,你的例子看起来像

SELECT * FROM books WHERE title ~ '^\d+ ?' 
Run Code Online (Sandbox Code Playgroud)

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


gel*_*zzz 8

如果要搜索为字符串,可以像这样转换为文本:

SELECT * FROM books WHERE price::TEXT LIKE '123%'
Run Code Online (Sandbox Code Playgroud)


Cha*_* 木匠 6

在 PostgreSQL 9.5 上测试:

-- 仅限数字

select * from books where title ~ '^[0-9]*$';
Run Code Online (Sandbox Code Playgroud)

或者,

select * from books where title SIMILAR TO '[0-9]*';
Run Code Online (Sandbox Code Playgroud)

-- 以数字开头

select * from books where title ~ '^[0-9]+';
Run Code Online (Sandbox Code Playgroud)