MySQL税务明细查询异常:如何匹配数值在区间内的记录
解决税务区间查询的SQL问题
嘿,我一眼就发现你写的SQL条件逻辑搞反啦!你当前的查询语句SELECT * FROM hotel_tax_details WHERE start_range_cost>=3000 AND end_range_cost<=3000,其实是在找那些区间起始值大于等于3000、同时区间结束值小于等于3000的记录——这只有当区间的上下限完全等于3000时才会匹配,完全不是你想要的“给定数值落在区间内”的逻辑。
要正确查询目标数值(比如3000、2500)处于start_range_cost与end_range_cost区间内的税务记录,你需要把条件反过来:目标数值要大于等于区间的起始值,同时小于等于区间的结束值。对应到SQL的正确写法是:
SELECT * FROM `hotel_tax_details` WHERE `start_range_cost` <= 3000 AND `end_range_cost` >= 3000;
举个例子,如果你要查询2500所在的区间记录,只需要把数值替换掉就行:
SELECT * FROM `hotel_tax_details` WHERE `start_range_cost` <= 2500 AND `end_range_cost` >= 2500;
这里的逻辑很直观:只要区间的起始值不超过目标数,且区间的结束值不小于目标数,那目标数就肯定落在这个区间里了。如果你的业务规则里区间是左闭右开(比如包含start但不包含end),可以把对应的符号改成<或者>,不过税务明细的区间一般都是包含上下限的,上面的写法应该能完美解决你的问题。
内容的提问来源于stack exchange,提问作者Janmejay
相关产品推荐
相关产品推荐

