为什么我收到TRUNC功能的错误?

时间:2017-06-25 19:42:45

标签: oracle date oracle12c truncate

select TRUNC(TO_DATE('22-AUG-03'), 'YEAR')
from dual;

ORA-01843:不是有效月份

第一个例子 - > https://www.techonthenet.com/oracle/functions/trunc_date.php

我知道“trunc”函数接受日期和可选的fmt参数。 为什么我收到此错误?

4 个答案:

答案 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; 提取年份。