在字符串列中查找非整数值

Bar*_*eep 4 regex postgresql

如何选择特定列中具有非整数值的记录?

我尝试过:

SELECT * FROM tableName WHERE status !~ '^\d+?\$'
Run Code Online (Sandbox Code Playgroud)

我想找到所有不存储精确整数表示的记录。

  Column   |         Type           | Modifiers 
------------+-----------------------+-----------
 status    | charecter varying(25)  |
Run Code Online (Sandbox Code Playgroud)

kha*_*son 7

由于您正在寻找非整数值,因此如果状态包含任何非数字的内容(即字母、小数点等),则它不是整数,因此此正则表达式应该有效:

select * from foo where status ~ E'[^\\d]'
Run Code Online (Sandbox Code Playgroud)

请注意反斜杠的双转义以及否定字符类的使用。

这是一个sqlfiddle

  • 如果您使用标准 SQL 字符文字,则不需要双反斜杠:`'[^\d]'` (2认同)

Erw*_*ter 5

Postgres 使用signed integer,我们需要允许一个可选的前导减号或加号( +-)。 作为整数文字无效:

SELECT * FROM tbl WHERE status !~ '^[+-]*\d+$'
Run Code Online (Sandbox Code Playgroud)

请注意,前导和尾随空白是可以容忍和修剪的,但嵌套空白不是。

小提琴
sqlfiddle。