gpt4 book ai didi

sql - ORA-01840 : input value not long enough for date format in Oracle Insert using Select

转载 作者:行者123 更新时间:2023-12-02 17:12:33 36 4
gpt4 key购买 nike

我在下面的查询中遇到错误,如 ORA-01840: 输入值的日期格式不够长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

关于sql - ORA-01840 : input value not long enough for date format in Oracle Insert using Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48296747/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com