2014-04-30 113 views
1

我想從表中獲取列值不爲空的記錄。Oracle - 獲取非空值

假設以下數據點

**my_table (table_name)** 

**my_column(column_name)** 
abc 
def 
null 

XYZ

所以我想尋找一種不爲空或空的記錄。基本上我的輸出必須是

abc 
def 
xyz 

我想什麼是

select * from my_table where my_column!=null & my_column!=''; 

這是返回0的記錄

,所以我嘗試搜索了一圈,發現甲骨文對待空字符串爲null且用於以下查詢

select * from my_table where trim(my_column) is not null; 

這將所有結果返回給除了具有空值的記錄外即

我甚至希望空字符串從結果中消失。我嘗試了以上所有可能的組合,但沒有得到期望的結果。

回答

1

假設my_columnVARCHAR2,這聽起來像你只是想

SELECT * 
    FROM my_table 
WHERE my_column IS NOT NULL 

你永遠要檢查是否my_column = nullmy_column != null。無論my_column的值如何,這些謂詞將始終評估爲false。沒有任何值等於NULL,並且沒有值永遠不等於NULL,甚至沒有其他值爲NULL。 Oracle沒有空字符串的概念。你要麼有一個NULL或者你有一個字符串有一個或多個空格或其他填充字符。所以不需要檢查該值是否爲空,只需檢查它是否爲NULL

+0

謝謝賈斯汀。這個查詢的唯一問題是,它不會評估空值,因爲它在網上的很多地方都有提及。我甚至嘗試修改您提供的查詢SELECT * FROM my_table WHERE trim(my_column)IS NOT NULL;這仍然給我空字符串作爲輸出 – user2686860

+0

@ user2686860 - 什麼'從my_table'選擇轉儲(my_column)顯示你實際上存儲在該列?看起來,所討論的行中有空格以外的東西。 –

+0

有趣。它向我展示Typ = 1 Len = 1:30.不知道那是什麼。 – user2686860