我需要在Oracle 12c中创建一个列为日期列的列,其值为:
20163
20164
20171
20172
20173
20174
...
如何为create table语句中的列指定?
感谢。
答案 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) - 也很好,但约束会更复杂。