Найти валюту / сумму в пределах $ 1,00

0

Как я запрошу для столбца суммы, который находится в пределах 1.00 от фактической суммы?

Например, если AmountPaid = 7,75, я хотел бы вернуть все результаты, где Сумма между 6.75 - 8.75.

Я знаю, что я пропускаю что-то простое, но на данный момент у меня есть следующий код...

Where (vc.AmountPaid >= med.Payment - 1.00 or vc.amountpaid <= med.Payment + 1.00)
Теги:
tsql
decimal
between
currency

3 ответа

1
Where (vc.AmountPaid between med.Payment - 1.00 and med.Payment + 1.00)
0

Вы не замечаете функцию ABS.

Самый простой способ получить то, что вы ищете:

where abs(AmountPaid-payment) <= 1

ABS хорошо, когда я имею дело с численными различиями. разница между 10 и 12 и 12 и 10 одинакова: 2. Обратите внимание на этот пример (который вы можете просто скопировать/вставить в SSMS и запустить):

declare @yourdata table (AmountPaid money, Payment money);
insert @yourdata values (50.00, 49.12),(100, 100.91),(25,1000),(10,20);

select AmountPaid, Payment, diff = abs(AmountPaid-payment)
from @yourdata
where abs(AmountPaid-payment) <= 1;

возвращается

AmountPaid            Payment               diff
--------------------- --------------------- ---------------------
50.00                 49.12                 0.88
100.00                100.91                0.91
  • 1
    Хотя это правильно на первый взгляд, с помощью функции ABS таким образом, вы сделали запрос не sargable. Вот хорошая статья здесь ( blog.bertwagner.com/… ).
  • 0
    @ Кэтрин Элизабет Лайтси - То, что я опубликовал, не просто «правильно на поверхности» - это правильно до сути. Отсутствие способности SARGability не должно приводить к отрицательному голосованию, поскольку это был вопрос с практическими рекомендациями, который привел к хорошей возможности обучения. Более того, моё решение можно превратить в индексированное представление, и, следовательно, SARGability больше не является проблемой.
0

Вы должны заменить OR ключевым словом на AND.

что-то вроде этого

Where (vc.AmountPaid >= med.Payment - 1.00 AND vc.amountpaid <= med.Payment + 1.00)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню