在 postgresql 数据库中查找包含非数字值的行

use*_*025 3 postgresql

我有一个表格,其中包含从气象观测中收集的数据。数据准备不充分,因此在插入数据库时​​出错。在最近的一次浏览中,我发现了不应该存在的非数字数据。

如何选择存在非数值的行?

表的布局如下:

#\d data.tempe
               Table "data.tempe"
   Column   |         Type          | Modifiers 
------------+-----------------------+-----------
 id-station | integer               | 
 year       | integer               | 
 t1         | character varying(25) | 
 t2         | character varying(25) | 
 t3         | character varying(25) | 
 t4         | character varying(25) | 
 t5         | character varying(25) | 
 t6         | character varying(25) | 
 t7         | character varying(25) | 
 t8         | character varying(25) | 
 t9         | character varying(25) | 
 t10        | character varying(25) | 
 t11        | character varying(25) | 
 t12        | character varying(25) |  
Run Code Online (Sandbox Code Playgroud)

Dmi*_*aev 13

WHERE field !~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$'
Run Code Online (Sandbox Code Playgroud)


Bru*_*uno 5

PostgreSQL 邮件列表上的这条消息中,您应该能够使用正则表达式。

例如,这样的事情应该使 t1 中的无效值无效:

UPDATE data.tempe SET t1=NULL
    WHERE t1 !~ E'^[+-]?[0-9]+(\\\\.[0-9]*)?([Ee][+-]?[0-9]+)?\$';
Run Code Online (Sandbox Code Playgroud)

(正则表达式可能取决于您期望的数据格式。)