You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL如何筛选所属月份含31天的日期 解决ORA-00932报错

报错核心原因

LAST_DAY() 是Oracle日期处理内置函数,入参要求为DATE类型,返回值为对应月份最后一天的DATE类型,两次写法均存在数据类型不匹配问题:

  1. 第一种写法将LAST_DAY()返回的DATE类型值直接与数字31比较,类型不匹配触发报错
  2. 第二种写法中EXTRACT(DAY FROM HIREDATE)返回的是数字类型(对应日期为当月的第几天),将数字传入要求DATE入参的LAST_DAY(),也会触发类型不匹配错误。

正确实现方案

方案1:提取当月最后一天的天数判断

直接对LAST_DAY()返回的当月最后一天日期,提取「日」部分和31比较,逻辑直观易读:

SELECT ENAME, HIREDATE 
FROM scott.emp 
WHERE EXTRACT(DAY FROM LAST_DAY(HIREDATE)) = 31;

也可以用TO_CHAR实现相同逻辑:

SELECT ENAME, HIREDATE 
FROM scott.emp 
WHERE TO_CHAR(LAST_DAY(HIREDATE), 'DD') = '31';

方案2:直接判断月份(性能更优)

一年中固定只有1、3、5、7、8、10、12月有31天,不需要计算当月最后一天,直接判断月份即可,大表查询时执行效率更高:

SELECT ENAME, HIREDATE 
FROM scott.emp 
WHERE EXTRACT(MONTH FROM HIREDATE) IN (1,3,5,7,8,10,12);

内容的提问来源于stack exchange,提问作者Linked List

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 17:00:05