什么数据类型用于在Informix中仅插入'YEAR'?

时间:2018-03-02 12:55:40

标签: informix

我正在尝试创建一个表,其中一列只应接受'YEAR' 例如:2017年,2018年,2019年以及“CURRENT YEAR”作为默认值。

我无法创建这样的专栏 - 你能帮助我吗?

预期产出:

DELETE t FROM (SELECT TOP (10000000) * FROM #t ORDER BY IIF(id = 0, 0, id)) t
OPTION (MAXDOP 1)

数据库服务器是Informix。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

create table t2 (c1 datetime year to year default current year to year, c2 int);

insert into t2 (c2) values(100);
insert into t2 values ('2017',101);
insert into t2 values (current,102);
select * from t2;


c1            c2

2018         100
2017         101
2018         102

答案 1 :(得分:0)

您可以使用多种类型中的任何一种。 “明显的”是:

  • DATETIME年份

最不明显的一个是:

  • 年度间隔年份 - 不推荐

另一种选择只是一个整数类型:

  • SMALLINT
  • INTEGER
  • BIGINT - 矫枉过正;不推荐
  • INT8 - 已弃用;不要使用

从长远来看,整数类型可能比DATETIME YEAR TO YEAR更容易使用;我几乎肯定会使用INTEGER或SMALLINT。

  

如何创建一个带有“年”列的表格,该列中的默认值是当前年份?

嗯;这对INTEGER类型很难。那时,DATETIME来救援:

CREATE TABLE YearTable
(
    RowNumber   SERIAL NOT NULL PRIMARY KEY,
    YearColumn  DATETIME YEAR TO YEAR NOT NULL DEFAULT CURRENT YEAR TO YEAR,
    DateColumn  DATE NOT NULL DEFAULT TODAY
);

INSERT INTO YearTable(RowNumber) VALUES(0);
SELECT * FROM YearTable;

例如(在环境中假设DBDATE=Y4MD-)会产生:

1       2018    2018-03-05

即使它们看似合理,你也不能使用任意表达式 - 这是令人厌烦的。因此,如果您需要默认值,则DATETIME YEAR TO YEAR类型是选择的类型。 (这是jrenautanswer中建议的内容。)

你可以安排一个整数类型的触发器;但这是相当困难的工作。