2012-07-18 90 views
2

我有一張表,其中包含從氣象觀測中收集的數據。數據不良,因此在將數據插入數據庫時​​出錯。在最近的瀏覽中,我發現了非數字數據,他們不應該是任何數據。在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) | 
+0

或另一種解決方案是將非數字值更改爲預定義值 – user528025 2012-07-18 22:22:43

回答

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]+)?\$'; 

(正則表達式可能取決於你所期望的數據格式。)

+0

hmm regedit?那麼對於UPDATE data.tempe SET t1 = NULL WHERE t1!〜E'[^ 0-9]'; – user528025 2012-07-18 23:00:12

+0

你是什麼意思「* regedit *」?不,'E'[^ 0-9]'會排除任何包含數字的東西。 'E'^ [0-9] + \ $''也許是正整數。 – Bruno 2012-07-18 23:05:27

+0

對不起有點累,我的意思是「正則表達式」。你原來的建議,以及一些修補應該做的伎倆。我會明天嘗試,我會公佈結果! – user528025 2012-07-18 23:44:13

1
WHERE field !~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$' 
相關問題