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

时间:2011-03-29 17:21:23

标签: db2

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

"CLOSE_DATE" DATE NOT NULL WITH DEFAULT DATE(CURRENT_DATE - DAY(CURRENT_DATE) DAYS),

但是我收到了一个错误:

  

SQL0104N意外的令牌“ -   天(当天时间)DAYS“被发现了   遵循“LT DATE(CURRENT_DATE”)。   预期的代币可能包括:   “”。 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)

效果很好。如果有人知道更简洁的语法,请随时发表评论。

1 个答案:

答案 0 :(得分:3)

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

select CURRENT_DATE - DAY(CURRENT_DATE) DAYS from sysibm.sysdummy1;

它正确执行并返回(2011年2月28日,今天3月29日)。

虽然我找不到任何明确表示默认值中不允许使用数学函数的内容,但db2 CREATE TABLE语法图对于默认值看起来像这样,并且未列出函数:

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)
); 

测试已创建,test2未创建。

我认为你可以通过插入后触发的触发器来完成你想要的任务。