2017-10-05 135 views
0

我試圖執行以下查詢:PostgreSQL - 將varchar轉換爲int?

DELETE FROM table_name WHERE ID>9; 

,但我不能,因爲「ID」字段類型爲「VARCHAR」的。 我如何將它轉換爲'int'並使它正常工作? (刪除ID大於9的所有行,而不是將其轉換爲數值varchar值)

+1

'DELETE FROM table_name WHERE ID :: int> 9;' –

+3

如果您預見需要將ID作爲數字處理,請考慮將其存儲在數字列中,而不是文本。 –

+0

嘗試你的第一個解決方案,我得到了整數的無效輸入語法:「」 – Gambit2007

回答

3

我不知道爲什麼要將數字值存儲爲字符串。您可能需要更多的東西一樣:

DELETE FROM table_name 
    WHERE regexp_matches(ID, '^[1-9][0-9]'); 

這從兩個數字,第一個是不0啓動表的任何id刪除。如果您嘗試進行轉換,那麼如果不是所有ID均爲數字,則可能會出現轉換錯誤。這也適用於可能溢出int的長數字(儘管numeric可以解決該問題)。

編輯:

對於一個通用的解決方案,我想我會寫爲:

where (case when regexp_matches(id, '^[0-9]+$') 
      then id::numeric 
     end) > 70000 

case應防止對非數字id小號任何錯誤。

+0

我正在處理別人的項目,而不是我的項目。我真的不明白你的解決方案,我怎麼能概括它呢?像'WHERE ID> 70000' – Gambit2007

相關問題