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