为何使用SYSDATE查询commandes表无结果?需获取2020年数据
问题原因及解决方法
为什么返回无结果?
你的SQL查询条件是让datecommande的年份等于当前SYSDATE的年份(2024年),同时月份匹配当前系统时间的月份,但你实际要查询的是2020年的数据,年份完全不匹配,自然找不到符合条件的记录,所以返回空结果。
原查询的核心逻辑是:
SELECT * FROM commandes WHERE EXTRACT(MONTH FROM datecommande) = EXTRACT(MONTH FROM SYSDATE) AND EXTRACT(YEAR FROM datecommande) = EXTRACT(YEAR FROM SYSDATE);
这里EXTRACT(YEAR FROM SYSDATE)取到的是2024,和你要查询的2020年不相等,因此没有匹配项。
修正后的查询
如果你要查询2020年全年的数据,可以直接指定年份:
SELECT * FROM commandes WHERE EXTRACT(YEAR FROM datecommande) = 2020;
如果要查询2020年某个特定月份(比如10月)的数据:
SELECT * FROM commandes WHERE EXTRACT(MONTH FROM datecommande) = 10 AND EXTRACT(YEAR FROM datecommande) = 2020;
也可以用日期范围的写法,若datecommande字段有索引,这种写法性能更优:
SELECT * FROM commandes WHERE datecommande BETWEEN TO_DATE('2020-01-01', 'YYYY-MM-DD') AND TO_DATE('2020-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS');
内容的提问来源于stack exchange,提问作者PRAIIIZ Fou
相关产品推荐
相关产品推荐

