4

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

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

该表的布局如下:

#\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) |  
4

2 回答 2

9
WHERE field !~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$'
于 2016-09-16T05:38:16.970 回答
5

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

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

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

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

于 2012-07-18T22:50:45.093 回答