[英]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.