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

在leave25表最后一列插入日期差值报错‘列不允许’,求解决

解决INSERT语句中“列不允许”的错误

咱们一步一步拆解你遇到的问题:

1. 核心语法误区:INSERT VALUES子句里不能直接引用表列名

你写的startdate-enddate是想调用表中的列,但在INSERT ... VALUES的上下文里,数据库根本不知道你说的startdate和enddate是什么——你是在插入新行,这两个值是你刚刚在VALUES里指定的(第4、5位的日期),此时它们还没被存入表中,自然无法被引用。

正确的做法是直接计算你给出的两个日期的差值,替换掉列名引用:

INSERT INTO leave25 
VALUES (
    4, 
    4, 
    'SICK', 
    TO_DATE('22-AUG-14','DD-MON-YY'), 
    TO_DATE('22-SEP-14','DD-MON-YY'), 
    TO_DATE('22-SEP-14','DD-MON-YY') - TO_DATE('22-AUG-14','DD-MON-YY')
);

小提示:Oracle中日期相减得到的是天数,想要正数结果的话,记得用结束日期减开始日期(上面例子里9月减8月,会得到31天)。

2. 其他需要修正的细节

  • 拼写不规范:vALUES虽然不影响执行,但推荐写成标准全大写VALUES;
  • 冗余符号:语句末尾的反斜杠\要删掉,它会被数据库识别为语法错误;
  • 列类型匹配:务必确认表的第6列是数值类型(比如NUMBER),如果是日期类型,插入天数差值肯定会触发“列不允许”的报错——这时候你需要调整表结构,或者换用INTERVAL相关的日期计算方式。

额外提醒:如果是更新已有行,别用INSERT!

如果你不是要插入新行,而是想给表中已有的行填充第6列的日期差值,那应该用UPDATE语句,而不是INSERT:

UPDATE leave25
SET days_diff = end_date - start_date;

(把days_diff、end_date、start_date替换成你表中实际的列名即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:38:38