2012-05-05 37 views
0
select 1 where somevalue = '' or somevalue is null from sometable 

我完全理解了背後的推理爲什麼我必須有兩個單獨的條件。令我感到困惑的是,爲什麼在這麼多年以後,還沒有一個標準的捷徑符號。爲什麼仍然沒有sql快捷方式在/ where條件中包含/不包含空值?

我可以看到爲什麼各種DBMS實現不提供快捷方式,因爲它不是必要的,這樣做會使你的SQL不那麼便攜,但考慮到所有DBMS的這種快捷方式的用處我不能理解爲什麼那些沒有添加快捷方式的權力會把這個做成sql規範。

我的問題:實際上是否有合法的理由,如果是的話是什麼?

+4

雖然我可以看到你的觀點,但我猜測其中的一部分是空的東西的存在與缺乏這種東西的根本不同? –

+2

呃,函數coalesce()解決了這個問題。爲什麼這是不夠的? –

+1

@Gordon Linoff ... coalesce()將實現他想要的,但你可以很容易地使用coalesce將NULL轉換爲'Chester Copperpot'。我正在閱讀的問題的方式是OP正在尋找一個SQL構造,根據定義,邏輯上將空和空作爲比較/計算/等的目的相同 –

回答

2

你可以只

select * from table where isnull(columnname,'')='' 

,或者如果你擔心'值,那麼你可以使用LTRIM和/或RTRIM。

+0

歡迎來到StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)語法突出它! –

+0

@marc_s我以爲這就是你在這裏;) –

3

我習慣於在Oracle中工作,其中空字符串 NULL,但不會工作嗎?

SELECT 1 FROM sometable WHERE COALESCE(somevalue, '') = '' 
+0

我發現你的SQL很有趣。 'NVL'是一個oracle事物,它是唯一的這個想法[不會工作]的地方(http://sqlfiddle.com/#!4/ec866/1),因爲如你所說''''在oracle中爲空 –

+0

哦,是的,哎呀。但是,如同Gorgon Linoff上面所建議的那樣,COALESCE也應該如此。 – eaolson

+0

除了當然在Oracle中,因爲這就像'COALESCE(somevalue,'')= NULL',它總是返回false –

0

我沒有看到問題。唯一的奇怪是由於Oracle不遵循使NULL與''相同的標準。

這是很容易這樣的:coalesce(columnname,'')=''

在MS SQL服務器,你也可以使用這個:isnull(columnname,'')=''

但要知道它是一個MS的唯一功能。