2013-01-05 73 views
19

我試圖從我的表中獲取空的「文本」字段,我用pgadmin手動清除。 最初在這些領域是'我可以查詢他們是這樣的:Postgresql,選擇空字段

SELECT mystr, mystr1 FROM mytable WHERE mystr='' or mystr1='' 

但是,如果我從他們刪除文本,並留下空白細胞是不行的。

如何編寫查詢以獲得結果中的那些'和'清除單元格? 或單獨清除細胞?

+0

字符串是空還是NULL? (在postgres中''''和'NULL'是不同的) – wildplasser

+0

我不知道'空白單元格'是什麼類型的,只是用pgadmin刪除單元格的所有文本。現在我嘗試查詢WHERE mystr = NULL或mystr1 = NULL,但沒有得到結果。 –

+6

你不能比較NULL,NULL不是一個值,它是正交的。您應該使用'WHERE mystr IS NULL'來代替。 – wildplasser

回答

37
SELECT mystr, mystr1 
FROM mytable 
WHERE COALESCE(mystr, '') = '' 
    OR COALESCE(mystr1, '') = '' 
    ; 

說明:coalesce(a,b,c, ...)功能遍歷該列表a,b,c,...由左到右,並在第一個非空元素停止。 a,b,c可以是任何表達式(或常量),但必須產生相同的類型(或者可以被強制爲相同的類型)。

+0

謝謝你的」wildplasser「,從來沒有看到這樣的表達或命令,我必須仔細檢查這個,這仍然沒有找到我的空單元格幸運的是,通過將數據複製到記事本中,我發現在那些「空」單元格中,pgadmin留下了一個空格(chr(32)),所以WHERE mystr =''給出了結果。字符串兩邊的空格? –

+0

是的,有一個TRIM()函數,它甚至是ANSI-SQL(就像COALESCE()一樣) – wildplasser