繁体   English   中英

Oracle SQL:如何使用表中的日期字段创建日期表或日期视图

[英]Oracle SQL: How can I create a date table or date view using a date field in a table

如何在单独的 sql 视图中为我的日期字段创建不同的日期列表,然后将计算列添加到该日期字段以提取年、月、月名称以及可能的日期。

所以下面是我希望我的 sql 视图返回的内容

DATE        |  DAY  |  MONTH  |  MONTH_NAME  |  YEAR
------------------------------------------------
01-01-2020  |    01 |      01 | January      |  2020
03-01-2020  |    03 |      01 | January      |  2020
ETC....

使用虚拟列:

CREATE TABLE calendar (
  dt         DATE PRIMARY KEY,
  day        NUMBER(2,0) GENERATED ALWAYS AS (EXTRACT(DAY FROM dt)),
  month      NUMBER(2,0) GENERATED ALWAYS AS (EXTRACT(MONTH FROM dt)),
  month_name VARCHAR2(9)
             GENERATED ALWAYS AS (
               CAST(
                 TO_CHAR(dt, 'fmMonth', 'NLS_DATE_LANGUAGE=ENGLISH')
                 AS VARCHAR2(9)
               )
             ),
  year       NUMBER(4,0) GENERATED ALWAYS AS (EXTRACT(YEAR FROM dt))
);

然后:

INSERT INTO calendar (dt)
SELECT DATE '2020-01-01' FROM DUAL UNION ALL
SELECT DATE '2020-01-03' FROM DUAL;

输出:

SELECT * FROM calendar;

是:

DT MONTH_NAME
2020-01-01 00:00:00 1 1 一月 2020
2020-01-03 00:00:00 3 1 一月 2020

如果要创建现有表的视图(例如, calendar表的视图),则只需在视图的SELECT中使用与上述虚拟列中相同的代码:

CREATE VIEW calendar_view (dt, day, month, month_name, year) AS
SELECT dt,
       EXTRACT(DAY FROM dt),
       EXTRACT(MONTH FROM dt),
       TO_CHAR(dt, 'fmMonth', 'NLS_DATE_LANGUAGE=ENGLISH'),
       EXTRACT(YEAR FROM dt)
FROM   calendar;

注意:如果您想限制字符串的大小,您可以添加CAST(... AS VARCHAR2(9))但这不是必需的。

db<> 在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM