1
Следующий запроса, который я сталкиваюсь с ошибкой деления на 0:Как избежать деления на нулевую ошибку здесь?
select pp.building_name,
ld.tenant_trading_name,
tenancy_reference,
ld.turnover_threshold,
ld.percentage_rent,
ld.income_base_rent_ach,
ld.income_base_rent_ach/ld.percentage_rent as correct
from
lease_deal.lease ld
inner join property.property pp
on ld.building_id = pp.building_id
where
(ld.income_base_rent_ach/ld.percentage_rent) <> ld.turnover_threshold
and lease_status = 'APPROVED'
and ld.progenesis_load_date is null
order by pp.building_name
Я попытался исправить это, выполнив следующие действия - но я получаю ошибку синтаксиса, и я не уверен, почему? Что здесь синтаксически неверно?
select pp.building_name,
ld.tenant_trading_name,
tenancy_reference,
ld.turnover_threshold,
ld.percentage_rent,
ld.income_base_rent_ach,
ld.income_base_rent_ach/ld.percentage_rent as correct
from
lease_deal.lease ld
inner join property.property pp
on ld.building_id = pp.building_id
where
case when ld.percentage_rent = 0
then 1=1
else ((ld.income_base_rent_ach/ld.percentage_rent) <> ld.turnover_threshold)
end
and lease_status = 'APPROVED'
and ld.progenesis_load_date is null
order by pp.building_name
Отлично. Любые мысли о том, почему я тоже получал синтаксическую ошибку (образовательное любопытство) – Codingo
Вы делились на ноль. Дуг удалил эту возможность, изменив ее на умножение (где нуль не проблема). Мой ответ был попыткой разумной проверки на 0 и использования ленивой оценки, чтобы убедиться, что она никогда не делит на ноль. – Fosco
Просто поясните: вы не можете полагаться на ленивую оценку или короткое замыкание, так как вы никогда не можете быть уверены, что данный 'x или y' SQL Server сначала оценит' x' - см. [Этот пост] (http: /dba.stackexchange.com/questions/12941/does-sql-server-read-all-of-a-coalesce-function-even-if-the-first-argument-is-no) для примеров случаев, когда короткое замыкание НЕ работает из-за этого: SQL Server не дает никаких гарантий относительно оценки слева направо, даже в случаях (без каламбура), где документация * делает * заставляет вас полагать, что эта гарантия существует. –