簡體   English   中英

在SQL中被零錯誤奇怪的除法

[英]Weird Divide by Zero Error in SQL

我有這個查詢:

-- There are a select and joins in the query
--Then I have this Where part
WHERE
(
    dbo.Table.Furnished IS NULL
    OR dbo.Table.Furnished = 0
)
AND (
    dbo.Table.Type2 = N'House'
)
AND (
    dbo.Table.Type3 = N'ForSale'
)
AND (
    dbo.Table.FixedArea/ dbo.Table.ToiletNumber< 250
)
AND (
    dbo.Table.FixedArea> 25
)

AND (
    CASE
    WHEN dbo.Table.Segment1 = 1 THEN
        'FirstGroup'
    WHEN dbo.Table.Segment1 = 2 THEN
        'SecondGroup'
    WHEN dbo.Table.Segment1 = 3 THEN
        'ThirdGroup'
    ELSE
        'Undefined'
    END <> 'Undefined'
)
AND (
    dbo.Table.Segment2 <> N'Undefined'
)
OR 
(
    dbo.Table.Furnished IS NULL
    OR dbo.Table.Furnished = 0
)
AND (
    dbo.Table.Type2 = N'Commercial'
)
AND (
    dbo.Table.Type3 = N'ForSale'
)
AND (
    dbo.Table.FixedArea/ dbo.Table.ToiletNumber< 250
)
AND (
    dbo.Table.FixedArea> 25
)

AND (
    CASE
    WHEN dbo.Table.Segment1 = 1 THEN
        'FirstGroup'
    WHEN dbo.Table.Segment1 = 2 THEN
        'SecondGroup'
    WHEN dbo.Table.Segment1 = 3 THEN
        'ThirdGroup'
    ELSE
        'Undefined'
    END <> 'Undefined'
)
AND (
    dbo.Table.Segment2 <> N'Undefined'
)

當我在原始查詢的底部(沒有任何除法之類)的下面添加此部分時, Divide by zero error encountered.

OR
    (
        dbo.Table.Geo IS NOT NULL
    )
AND (
    dbo.Table.FixedArea > 0
)
AND (
    dbo.Table.Price > 0
)
AND (
    dbo.Table.RoomNumber LIKE N'%+%'
)
AND (
    dbo.Table.Furnished IS NULL
    OR dbo.Table.Furnished = 0
)
AND(
dbo.Table.Type3 = N'ForRent'
)

為什么我得到除以零的錯誤? 我不添加任何部門。 我只是添加一些新的過濾器。 請幫我解決這個錯誤。 謝謝。

您實際上是在這里執行dbo.Table.FixedArea/ dbo.Table.ToiletNumber< 250 ...並且ToiletNumber可能為零

編輯:嘗試通過將以上代碼更改為重新運行查詢

dbo.Table.FixedArea / NULLIF(dbo.Table.ToiletNumber, 0) < 250

您的div / 0在這里:

 (
    dbo.Table.FixedArea/ dbo.Table.ToiletNumber < 250
)

這個:

AND (
    dbo.Table.FixedArea> 25
)

可能刪除了所有div / 0

現在這個:

AND (
    dbo.Table.FixedArea > 0
)

意味着FixedArea在0到25之間的行的ToiletNumber可能為0,必須對其進行評估

修理:

case when ToiletNumber = 0 then 1
     else dbo.Table.FixedArea/ dbo.Table.ToiletNumber
end <250

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM