select TRUNC(TO_DATE('22-AUG-03'), 'YEAR')
from dual;
ORA-01843:不是有效月份
第一个例子 - > https://www.techonthenet.com/oracle/functions/trunc_date.php
我知道“trunc”函数接受日期和可选的fmt参数。 为什么我收到此错误?
答案 0 :(得分:3)
我认为问题不在于trunc()
。我认为问题是日期格式。使用date
关键字和ISO标准格式化日期更安全:
select TRUNC(DATE '2003-08-22', 'YEAR')
from dual;
日期字符串的解释取决于特定环境的国际化设置。上面没有那种依赖性。
答案 1 :(得分:0)
这是一个非常简单的检查:在SELECT
失败的同一会话中,如果你改变NLS_DATE_FORMAT
,看看如果你运行更简单的陈述会发生什么,
SELECT TO_DATE('22-AUG-03') FROM DUAL
你会得到同样的错误 - 这最终证明它与TRUNC()
无关。
要使所有内容完全按照教程中的方式工作,请发出命令
ALTER SESSION SET NLS_DATE_FORMAT = 'dd-MON-yy'
首先,在其他一切之前。请注意,在大多数情况下,将年份作为两位而不是四位的格式是一个非常糟糕的主意。
答案 2 :(得分:0)
您似乎希望获得参数中收到日期的年份 如果您将'22 -AUG-03'作为参数,请将TO_DATE函数添加到您期望的日期格式中,然后将其截断:
SELECT TRUNC(TO_DATE('22-AUG-03', 'dd-MON-yy'),'YEAR') FROM DUAL
答案 3 :(得分:0)
使用SELECT EXTRACT (YEAR FROM TO_DATE('22 -AUG-03','dd-MON-yy'))FROM DUAL; 提取年份。