是否有更簡潔的語法來檢查多列是否不爲空?我正在尋求簡化Oracle SQL語法 - 爲IS檢查多個列NOT NULL
weight IS NOT NULL AND
weight_unit IS NOT NULL AND
length IS NOT NULL AND
width IS NOT NULL AND
height IS NOT NULL AND
dimensional_unit IS NOT NULL
變成更短的東西。
使用Oracle,如果它是相關的。
是否有更簡潔的語法來檢查多列是否不爲空?我正在尋求簡化Oracle SQL語法 - 爲IS檢查多個列NOT NULL
weight IS NOT NULL AND
weight_unit IS NOT NULL AND
length IS NOT NULL AND
width IS NOT NULL AND
height IS NOT NULL AND
dimensional_unit IS NOT NULL
變成更短的東西。
使用Oracle,如果它是相關的。
據我所知,沒有這樣的語法。
但是,如果所有的人都是數字,你可以使用這一招:
weight + weight_unit + length + width + height + dimensional_unit is not null
如果任何一列有索引,這將是一個壞主意,因爲它會阻止數據庫使用索引來回答查詢。最好堅持與。 – 2011-12-21 20:59:38
如果有人想把這個技巧轉換成連接varchar2或varchar列,id將不起作用。在Oracle中使用串聯。 'A ||如果B'爲空,則B'將是'A'。所以'C1 || C2 || C3 ||如果任何一列不爲空,C4'將不爲空。 – 2011-12-21 21:47:16
@sacundim - 真的沒有問題。 6鏈'IS NOT NULL'條件不會對索引友好,但是你做它。 – 2011-12-21 21:49:49
NOT(A或B)=(NOT A)和(非B)
您節省20個字符;)
NOT (
weight IS NULL OR
weight_unit IS NULL OR
length IS NULL OR
width IS NULL OR
height IS NULL OR
dimensional_unit IS NULL
)
如果要檢查所有的列是NOT NULL,那麼你可以先串聯的列,然後一次測試中進行IS NOT NULL如:
weight || weight_unit || length || width || height || dimensional_unit IS NOT NULL
這將檢查是否所有的值一起跨越這些領域總共不會有NULL。
如果只是測試它們之間是否可能存在NULL,那麼我認爲您的問題的原始聲明仍然是最好的方式來做到這一點。
他希望他們中的任何一個都是NULL。你寫的東西可以用COALESCE寫得更好(wheight,length,...)不爲空 – 2011-12-21 22:05:53
道歉,相應更新 – 2011-12-21 22:13:21
在Oracle中,如果任何值不爲null,修改後的答案將返回true,如果全部答案不爲空(例如''a'|| null ='a'')。 – Allan 2011-12-21 22:46:15
這個怎麼樣..... COALESCE(字段1,字段2,...,字段N)不爲空
我認爲這將有助於爲目的!!!!
它不會。如果AT至少有一列不爲空,問題是測試是否所有列都不爲空。 – 2015-01-21 10:27:00
我想如果所有列/變量的類型數字或VARCHAR2的話,可以在SQL中使用下面的方法來解決這個問題, ,PL/SQL:
LENGTH(COL1||COL2||COL3) IS NOT NULL
希望這會幫助你。
ALTER TABLE X
ADD CONSTRAINT C_X_NN
CHECK ( (
DECODE (weight, NULL, 0, 1) +
DECODE (weight_unit, NULL, 0, 1) +
DECODE (length , NULL, 0, 1) +
DECODE (width , NULL, 0, 1) +
DECODE (height , NULL, 0, 1) +
DECODE (dimensional_unit , NULL, 0, 1)
) = 0
);
我很確定這是一個騙局,但我似乎無法找到它。 – JNK 2011-12-21 20:41:54
如果這可能是你想避免的一個條件(即所有的空值),那麼我建議在表上添加NOT NULL約束,然後你的查詢永遠不需要檢查。 – DaveRlz 2011-12-21 22:03:26
同意@DaveRlz:建議分別爲'ThingWeight'和'ThingSize'分別設置表格,這樣如果一個東西的重量是未知的/不適用的/ etc,那麼不要在ThingWeight表格中添加一行。 – onedaywhen 2011-12-22 10:03:08