我想解決這個問題,但無法獲取任何地方。SQL除以零錯誤,nullif沒有幫助
從我迄今爲止發現的情況來看,我認爲我需要對每個除數使用一個nullif
子句,但是當我嘗試這樣做時,它仍然不起作用。
下面是沒有nullif
的聲明,它產生零除誤差。
(1 - (1 - (x1.hup/(x1.hup/(x1.dp/100))))/(1 - (x2.sdp/100)))
我想解決這個問題,但無法獲取任何地方。SQL除以零錯誤,nullif沒有幫助
從我迄今爲止發現的情況來看,我認爲我需要對每個除數使用一個nullif
子句,但是當我嘗試這樣做時,它仍然不起作用。
下面是沒有nullif
的聲明,它產生零除誤差。
(1 - (1 - (x1.hup/(x1.hup/(x1.dp/100))))/(1 - (x2.sdp/100)))
可能有更簡單的方法來表達這一點。我想這是所有你需要:
(1 - (1 - (x1.hup/(x1.hup/nullif(x1.dp/100, 0))))/nullif(1 - (x2.sdp/100)), 0))
'x1.hup'也可能爲零。我想知道表達式應該是什麼解決,因爲它看起來相當瘋狂:D – Luaan
我開始認爲我的公式可能是問題..:)... x1.hup = 395.42,x1.dp = 50,x2.sdp = 10和答案我是尋找是44.44 ..... –
@ S.Carter。 。 。也許你應該問一個關於樣本數據的問題,期望的結果以及你想要計算完成的解釋。 –
這是沒有答案
創建一個函數來檢查zero
這樣
CREATE FUNCTION [dbo].[IsZero] (
@Number FLOAT,
)
RETURNS FLOAT
AS
BEGIN
IF (@Number = 0)
BEGIN
SET @Number = 1
END
RETURN (@Number)
END
不是很優雅,但會做的工作。
SELECT CASE WHEN (1 - (x2.sdp/100) = 0 THEN NULL
WHEN (x1.dp/100) = 0 THEN NULL
WHEN (x1.hup/(x1.dp/100)) = 0 THEN NULL
WHEN (x1.hup/(x1.hup/(x1.dp/100))) = 0 THEN NULL
ELSE (1 - (1 - (x1.hup/(x1.hup/(x1.dp/100))))/(1 - (x2.sdp/100)))
END AS field
FROM yourtable
合併爲零不是您正在尋找的魔力子彈。
只是試圖簡化你的問題;如果你有42/x
和x
是null
,用零替換它只會導致一個除法錯誤。
我不知道你在這種情況下應用的公式,但你缺乏的主要是驗證。在我上面的例子中,如果x
等於0,我們遇到了問題。
同樣,在23/(100 - x)
,x
不能是100,所以你必須事先檢查並相應地處理情況。如果它是一個除數,沒有表達式可以導致0。
因此,試圖確定哪些限制應該在處理之前觀看;例如,對於x1.dp
或x1.hup
和x2.sdp
可能不是100(1 - 100/100 = 0
,對吧?),您的聲明不得接受0。如果發生這些情況之一,您可能會返回錯誤或其他內容。
我認爲你誤解了這個問題。 NULLIF可以將零除數轉換爲null,從而使完整的計算爲空,這顯然是OP所需的。問題或多或少都是將NULLIF放置成處理除數可以爲空的所有情況。 –
如果'x2.sdp'是100呢?那麼你有'(1 - (100/100)',這是0,將成爲除數 – SomeJavaGuy
如果我沒有弄錯,你的公式可以縮寫爲x1.dp /(100 - x2.sdp)。 x1.hup完全,你只需要檢查x2.sdp是否爲100。也許你在你的公式中犯了一個錯誤。 –