Oracle 12c - 如何设置' date'年度专栏?

时间:2017-11-01 00:32:18

标签: sql oracle create-table

我需要在Oracle 12c中创建一个列为日期列的列,其值为:

20163
20164
20171
20172
20173
20174
...

如何为create table语句中的列指定?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以将列建模为包含日期,仅限于每个季度的第一个时刻。

CREATE TABLE TEMP
( QUARTER DATE 
    CONSTRAINT IS_QUARTER CHECK ( (QUARTER = TRUNC(QUARTER, 'Q') ) )
)

要将值放入表中,您需要将日期设置为季度开头:

INSERT INTO temp VALUES ( TO_DATE('2017-04', 'yyyy-mm') );

要从表中读取值,您可以根据需要进行格式化:

SELECT TO_CHAR( quarter, 'YYYYQ') FROM temp;

因为基础列是日期,所以您可以执行将其与其他日期进行比较等操作。

SELECT TO_CHAR( ADD_MONTHS( quarter, 3 ), 'YYYYQ') FROM temp;

答案 1 :(得分:-2)

乔!

您描述的这些字段经常用于月度。

典型地,它们以整数数据类型编码。

如果您不在Oracle上,Int32将是完美的。

在Oracle中,决定并不是那么明确。

我更喜欢NUMBER(6,0)和简单约束,该字段大多数将来会比任何可能的日期都少。

CHAR(6) - 也很好,但约束会更复杂。