Orcale and 邏輯運算子的特殊情況

2022-04-09 08:43:27 字數 814 閱讀 1618

前些日子在做專案的時候遇到乙個很詭異的情況,今天打算寫下來供朋友們分享。

我們平常在寫oracle 語句的時候,可能會在 where 語句後面 加上 and邏輯運算子,但是這樣存在乙個問題。列下

select (t1.salecount/t1.purductcount) as s from table1 t1

where

t1.purductcount>0

從上面這段sql語句來看是沒有任何問題的,我其實就是將商品的銷量來除以商品的總量來得到上面的銷售率。

在purductcount欄位不為0的時候查詢是不會出任何問題的,但是假如purductcount有0的情況。當然就會出問題了,分母是不能為0的。

可能有朋友就會說了你個sb,你這裡不是用where語句過濾掉了嗎?

是的這裡就是特殊情況了,先來說說這個and邏輯運算子在orcale裡面的情況(mssql不清楚)如果有and的 sql語句,那麼orcale執行的情況是,

先把結果集找出來然後再直接 and邏輯運算,說白了and這個運算是在查詢後來執行的。這樣會出現什麼情況。

肯定程式就會報分母不能為0的錯誤了。因為and沒有運算前,我們的資料庫裡面的資料可能是有0存在的但我們查詢結果的時候又在做除法運算。

怎麼解決呢?方法很多哈,

最簡單的一種就是 在查詢的時候用decode函式  過濾如果分母為0那麼就將查詢出來的字段值替換成0或者特殊字元,

然後最後加上過濾這個特殊字元的 where條件即可。

第一次寫,反正是給自己留著用的。

至於你們看不看的懂我就沒辦法了。

作者 harry 劉

邏輯運算子( , )

操作!是的 運算子不執行布林操作,有只有乙個運算元,位於其權利,和唯一,它確實是逆是它的價值,生產假如果真實,真實的,如果其運算元其運算元為false。基本上,它返回布林值,評價其運算元相反。例如 1 2 3 4 5 5 evaluates to false because the expressi...

邏輯運算子

邏輯運算子 符號 作用 符號 作用 或and 與 或 not 非 或or 或 xor 異或 與 運算 1 或者 and 是 與 運算的兩種表達方式。如果所有資料不為0且不為空值 null 則結果返回1 如果存在任何乙個資料為0,則結果返回0 如果存在乙個資料null且沒有資料為0,結果返回null。...

邏輯運算子

邏輯與 當兩個運算元的值都為true時,運算結果為true 邏輯或 只要兩個運算元中有乙個值為true時,運算結果就為true 邏輯非 對運算元取反,即true值非運算的結果false,false值非運算的結果為true 案例 test1 var a 1,b 0,c hello a b c worl...