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

时间:2012-07-18 22:15:32

标签: 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) |  

2 个答案:

答案 0 :(得分:4)

this message on the PostgreSQL mailing list开始,您应该可以使用正则表达式。

例如,类似这样的东西应该使t1中的无效值无效:

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

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

答案 1 :(得分:1)

WHERE field !~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$'