실제 금액의 1.00 범위에있는 금액 열을 어떻게 쿼리합니까?
예를 들어 AmountPaid = 7.75 인 경우 금액이 6.75 - 8.75 사이 인 경우 모든 결과를 반환하고 싶습니다.
는 내가 뭔가를 간단 내려다 보이는,하지만 지금, 나는 다음과 같은 코드를 알고 ...
Where (vc.AmountPaid >= med.Payment - 1.00 or vc.amountpaid <= med.Payment + 1.00)
실제 금액의 1.00 범위에있는 금액 열을 어떻게 쿼리합니까?
예를 들어 AmountPaid = 7.75 인 경우 금액이 6.75 - 8.75 사이 인 경우 모든 결과를 반환하고 싶습니다.
는 내가 뭔가를 간단 내려다 보이는,하지만 지금, 나는 다음과 같은 코드를 알고 ...
Where (vc.AmountPaid >= med.Payment - 1.00 or vc.amountpaid <= med.Payment + 1.00)
교체하거나 함께 키워드를해야합니다. 이
Where (vc.AmountPaid >= med.Payment - 1.00 AND vc.amountpaid <= med.Payment + 1.00)
Where (vc.AmountPaid between med.Payment - 1.00 and med.Payment + 1.00)
당신은 ABS 기능을 내려다 보이는 같은
뭔가.
가장 간단한 방법
는 것이다 찾고있는 것을 얻을 : 나는 수치 차이를 처리하고 때where abs(AmountPaid-payment) <= 1
ABS가 좋다. (당신이 복사/SSMS에 붙여 실행 만 할 수있는)이 예 2 주 : 10, 12, 12과 10의 차이는 동일
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
그 표면에 올바른 동안, 그런 식으로 ABS 기능을 사용하여 쿼리를 sargable 만들었습니다. 여기 좋은 기사가 있습니다 (https://blog.bertwagner.com/how-to-search-and-destroy-non-sargable-queries-on-your-server-ff9f57c7268e). –
@ Katherine Elizabeth Lightsey - 내가 올린 내용은 단지 "올바른 것"이 아니라 핵심에 맞습니다. SARGability의 결여는 이것이 좋은 학습 기회를 가져 오는 방법에 관한 질문 이었기 때문에 최저 투표를 구성해서는 안됩니다. 또한 내 솔루션은 인덱싱 된 뷰로 전환 될 수 있으므로 SARGability는 더 이상 문제가되지 않습니다. –
Where (v.AmountPaid med.Payment - 1.00과 med.Payment + 1.00 사이) –