2013-09-25 45 views
0

如何返回所有可能性,無論是否有內容或它是否爲NULL?WHERE語句選擇所有內容(內容和NULL)

如果我想回到一切不是NULL:

SELECT * FROM table WHERE column LIKE '%' 

如果我想返回空值都:

SELECT * FROM table WHERE column IS NULL 

如何合併他們兩個?我需要能夠,因爲我參數化它。我的應用程序的前端將有多個選項ALL(任何內容或NULL)或特定值。

我該如何做到這一點?

編輯:

讓我澄清更好。我有一個下拉列表,將顯示類似這樣

- 選擇清一色 A隊 B隊 東西...

所以如果選擇 - 選擇清一色然後我需要查詢返回空值的所有和那些與任何一支球隊

如果A隊選中,我需要只顯示A隊和沒有空值等等......

我不能更改查詢只是一個單一的變量(參數)

+2

嗯..所有*不要*使用任何標準? –

+0

以上只是一個例子。實際上,我正在處理一個長而複雜的查詢,並且必須有一個參數,因爲我將通過C#傳遞它。 –

回答

2

這很簡單。只得到NULLS:

SELECT * FROM table 
WHERE column IS NULL 

只得到不NULLS:

SELECT * FROM table 
WHERE column IS NOT NULL 
-- could be this if your example is not representative 
-- WHERE column IS NULL OR column LIKE '%whatever%' 

而對於一切(無過濾器),只是做:

SELECT * FROM table 

進一步澄清:

在你的例子中,如果代碼已經寫好,你可以Ÿ通過在WHERE子句中,那麼你可以這樣做:

WHERE <insert here> 

column IS NULL -- just nulls 
column = 'teamX' OR column IS NULL -- nulls or 'teamX' 
column IS NOT NULL -- any value, but no nulls 
1=1 -- for the case where you don't really want a WHERE clause. All records 

這聽起來並不像這是構建代碼的最佳方式,但如果你已經通過一些限制是不能改變的,我想你必須做。

3
WHERE column LIKE '%' OR column IS NULL 
+3

有趣的是,相同的答案如何在一個地方得到upvoted,並在其他地方downvoted –

+0

這是否意味着除了查詢沒有WHERE子句?這是不必要的打擊,不是嗎? – Kaf

+1

@YuriyGalanter不確定是否有趣。我不確定你是否在暗示某些事情,但是我認爲之前使用「AND」的只有**低估的答案。無論如何,這不是我的倒退。而且,不知道它是否重要,但顯然我的回答是首先發布的,所以這可能會影響我爲什麼得到upvotes – Lamak

0

一種情況是不使用where子句。

否則,您可以使用或條件

where (column is null or column like '%something%') 
1

如果我明白你的問題,那麼這是你在找什麼

SELECT * 
FROM table 
WHERE column LIKE '%' or column Is null 
1

是否select * from table得到你想要的是什麼?

1

也許你的意思是「參數可以通過或參數可以爲NULL」?

如果是這樣那麼這樣的事情應該做的伎倆

SELECT * FROM table WHERE param IS NULL OR column LIKE '%' + param '%' 

同樣,如果參數傳遞的關鍵字「ALL」,意思是「選擇一切」這將是

SELECT * FROM table WHERE param = 'All' OR column LIKE '%' + param '%' 
3

假設NULL作爲參數值的意思是「全部」

WHERE Team = @Team OR @Team IS NULL 

除非你在2008+ 使用OPTION (RECOMPILE)雖然這可以給次優計劃。

Dynamic Search Conditions in T-SQL

0

嘗試是這樣的:

SELECT * FROM table WHERE column LIKE '%' 
Union 
SELECT * FROM table WHERE column IS NULL 

,如果他們有相同的列名和號碼將結合兩種查詢,因爲唯一的區別是WHERE子句,它應該是工作