如何编写SQL查询从datebegin和dateend两列筛选包含指定日期的记录
SQL日期区间查询实现方案
实现逻辑
要筛选指定日期落在datebegin和dateend区间内的记录,核心逻辑为:
- 先把字符串格式的指定日期
2013.01.20转换为SQL可识别的日期类型,避免字符串比较出现逻辑偏差 - 筛选条件满足:指定日期 ≥
datebegin且 指定日期 ≤dateend
通用查询语句(以MySQL为例)
请将语句中的你的表名替换为实际业务中的表名:
-- 写法1:使用比较运算符,逻辑更直观 SELECT datebegin, dateend FROM 你的表名 WHERE STR_TO_DATE('2013.01.20', '%Y.%m.%d') >= datebegin AND STR_TO_DATE('2013.01.20', '%Y.%m.%d') <= dateend;
也可以用BETWEEN简化写法,逻辑和上面完全等价:
-- 写法2:使用BETWEEN语法 SELECT datebegin, dateend FROM 你的表名 WHERE STR_TO_DATE('2013.01.20', '%Y.%m.%d') BETWEEN datebegin AND dateend;
其他数据库适配
不同数据库的日期转换函数略有差异,按需替换即可:
- SQL Server:将
STR_TO_DATE('2013.01.20', '%Y.%m.%d')替换为CONVERT(DATE, '2013.01.20', 102) - PostgreSQL:将
STR_TO_DATE('2013.01.20', '%Y.%m.%d')替换为TO_DATE('2013.01.20', 'YYYY.MM.DD') - Oracle:将
STR_TO_DATE('2013.01.20', '%Y.%m.%d')替换为TO_DATE('2013.01.20', 'YYYY.MM.DD')
以上语句针对你提供的示例数据,会返回2013-01-19 | 2013-01-30的符合预期的结果。
内容的提问来源于stack exchange,提问作者prime11
相关产品推荐
相关产品推荐

