我有以下查询,其中出现错误ORA-01840: input value not long enough for date format
. The C_DATE
列是日期数据类型。
INSERT INTO CS_LOG(NAME, ID, C_DATE)
Select MAX(ML.NAME), ML.ID, TO_CHAR(CHK_DATE,'YYYYMM')
from D_ID ML,
CS_LOG MD
WHERE ML.NAME != MD.NAME
and ML.ID != MD.ID
and MD.C_DATE = LAST_DAY(to_date(sysdate,'YYYYMMDD'))
GROUP BY ML.ID, C_DATE;
您无法插入“带有格式”的日期。日期具有内部表示形式,它们始终具有所有日期/时间组件,然后可以根据需要设置格式以进行显示。
您生成为 YYYYMM 的字符串将通过插入隐式转换为日期,因为这是目标列的数据类型。该隐式转换使用您的 NLS 设置,并由此期望更长的值来匹配 NLS 日期格式。您的字符串与该隐式格式不匹配,这导致了您看到的错误。
如果您只对年份和月份感兴趣,那么您可以获得的最接近的结果是存储该月第一天的午夜,您可以使用trunc
:
INSERT INTO CS_LOG(NAME, ID, C_DATE)
Select MAX(ML.NAME), ML.ID, TRUNC(CHK_DATE,'MM')
from D_ID ML,CS_LOG MD
WHERE ML.NAME != MD.NAME and ML.ID != MD.ID
and MD.C_DATE = LAST_DAY(sysdate)
GROUP BY ML.ID,C_DATE;
我还删除了多余的to_date
称呼。您也应该考虑切换到 ANSI 连接语法。
然后你可以格式化c_date
作为 YYYYMM 在您查询时显示,如果这是您需要的,通过to_char
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)