DB2日期列,默认为上个月的最后一天?

DB2日期列,默认为上个月的最后一天?,db2,Db2,我试图创建一个带有日期列的db2表,其中默认值是上个月的最后一天。在CREATETABLE语句中,我将列定义为: "CLOSE_DATE" DATE NOT NULL WITH DEFAULT DATE(CURRENT_DATE - DAY(CURRENT_DATE) DAYS), 但我得到了一个错误: SQL0104N意外标记“- 找到“天(当前_日期)天” 在“LT日期(当前_日期)”之后。 预期代币可能包括: “”.SQLSTATE=42601 这是不允许的,还是我有一些语法错误 更新-

我试图创建一个带有日期列的db2表,其中默认值是上个月的最后一天。在CREATETABLE语句中,我将列定义为:

"CLOSE_DATE" DATE NOT NULL WITH DEFAULT DATE(CURRENT_DATE - DAY(CURRENT_DATE) DAYS),
但我得到了一个错误:

SQL0104N意外标记“- 找到“天(当前_日期)天” 在“LT日期(当前_日期)”之后。 预期代币可能包括: “”.SQLSTATE=42601

这是不允许的,还是我有一些语法错误

更新-我使用了:

CREATE TRIGGER TRIGGER_NAME AFTER INSERT ON SCH.TABLE FOR EACH ROW
UPDATE SCH.TABLE SET CLOSE_DATE = DATE(CURRENT_DATE - DAY(CURRENT_DATE) DAYS)

这非常有效。如果有人知道更简洁的语法,请随意评论。

我认为该语句的语法是正确的。如果我运行查询:

select CURRENT_DATE - DAY(CURRENT_DATE) DAYS from sysibm.sysdummy1;
它正确执行并返回(2011年2月28日,今天为3月29日)

虽然我找不到任何明确表示默认值中不允许使用数学函数的内容,但db2语法图中的默认值如下所示,没有列出函数:

default-values

|--+-constant-------------------------------------------+-------|
   +-datetime-special-register--------------------------+   
   +-user-special-register------------------------------+   
   +-CURRENT SCHEMA-------------------------------------+   
   +-NULL-----------------------------------------------+   
   '-cast-function--(--+-constant------------------+--)-'   
                       +-datetime-special-register-+        
                       +-user-special-register-----+        
                       '-CURRENT SCHEMA------------'
我还尝试了以下测试:

create table test (
test_column integer with default 1
);

create table test2 (
test_column integer with default (2 - 1)
); 
已创建测试,但未创建测试2

我想你可以通过插入后触发的触发器来完成你想要的事情。

我知道这是一篇旧(er)帖子,但我想我要指出的是(至少在LUW 9.7中),有一个函数可以根据日期表达式给出一个月的最后一天(例如,
最后一天(当前日期)
)不幸的是,
DEFAULT
s仍然不允许除内置强制转换函数以外的任何函数(请参见上的原因代码7)。