如何查询指定日期是否处于表中from_date和to_date两个不同列的区间范围内
错误原因分析
你编写的SQL无法运行的核心问题是BETWEEN运算符后需要接两个同类型的可比较值,你填入的(from_date = "2021-08-26")是布尔判断表达式,返回结果为true/false,无法和日期类型的常量做比较,因此会触发语法错误或逻辑错误。另外SQL规范中日期常量建议使用单引号包裹,双引号在多数数据库中用于标识表名、列名等标识符,混用也可能导致报错。
可行实现方案
方案1:基础比较运算符写法(全数据库兼容)
直接通过两个不等式分别判断待查日期大于等于起始日期、小于等于结束日期即可,所有主流数据库都支持该写法:
SELECT * FROM LeaveApplication WHERE from_date <= '2021-08-27' AND to_date >= '2021-08-27';
如果你的from_date/to_date字段包含时分秒,需要判断到当日结束的话,可以调整为:
SELECT * FROM LeaveApplication WHERE from_date <= '2021-08-27 23:59:59' AND to_date >= '2021-08-27 00:00:00';
方案2:BETWEEN 简化写法
BETWEEN本身支持左侧放待比较值,右侧放两个字段名,语法更简洁,MySQL、PostgreSQL、SQL Server等主流数据库均支持:
SELECT * FROM LeaveApplication WHERE '2021-08-27' BETWEEN from_date AND to_date;
该写法和方案1的逻辑完全等价,默认是左闭右闭区间,即同时满足>= from_date和<= to_date。
内容的提问来源于stack exchange,提问作者Eaten Taik
相关产品推荐
相关产品推荐

