本文主要是介绍Oracle用BETWEEN AND查某年的数据可能会丢失条数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
随便找一张有日期(字段类型为DATE)的表即可测试。
假设存在这样一张表HOLIDAY,里面存储的是某些国家(表字段为COUNTRY_CODE)某些年的法定假日日期(表字段为HOLIDAY_DATE)。
我想查中国在2023年和2024年的法定假日日期。
BETWEEN AND
首先想到的是BETWEEN AND:
-- BETWEEN AND查年份不精确
SELECT * FROM HOLIDAY WHERE COUNTRY_CODE = 'cn' AND HOLIDAY_DATE BETWEEN TO_DATE('2023','yyyy') AND TO_DATE('2024','yyyy');
根据查询结果来看,AND TO_DATE(‘2024’,‘yyyy’)只能查到2024-01-01,24年只查到一天。
而且对比数据来看,如果在2024-01-15执行上述sql,23年的查询记录在2023-01-15到2023-12-31之间,23年的数据也会丢失一部分。
日期完整性问题
日期存储格式为20240101,包含月日,写查询语句也要包含月日,否则可能丢失条数。
SELECT * FROM HOLIDAY WHERE COUNTRY_CODE = 'cn' AND HOLIDAY_DATE BETWEEN TO_DATE('20230101','yyyyMMdd') AND TO_DATE('20241231','yyyyMMdd');
EXTRACT函数
专门用来截取年、月、日、时、分、秒的函数。
SELECT * FROM HOLIDAY WHERE COUNTRY_CODE = 'cn' AND EXTRACT(YEAR FROM HOLIDAY_DATE) IN('2023','2024');
这篇关于Oracle用BETWEEN AND查某年的数据可能会丢失条数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!