oracle - oracle月年临时表
问题描述
我正在尝试创建一个可以在计算中关联的月、年临时表,但是我遇到了一些问题。由于限制,我无法创建全局临时表,必须依赖以下类型的查询。
WITH Months AS
(
SELECT LEVEL -1 AS ID
FROM DUAL
CONNECT BY LEVEL <=264
)
(SELECT
ROWNUM AS MO_SYS_ID,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'YYYY'||'MM') AS MO_NM,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'MON') AS MO_ABBR_NM,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'MONTH') AS MO_FULL_NM,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'MM')AS MO_NBR,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'YYYY') AS YR_NBR
from Months;
我真正需要做的是将它插入到我可以回忆的临时表中。不幸的是,我也没有可以从其他表中使用的任何字段。我需要它显示自 1999 年以来的 264 个月。
谢谢
解决方案
您可以计算表表达式中的日期列,如下所示:
WITH Months AS (
SELECT LEVEL -1 AS ID, ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), LEVEL -1) as dt
FROM DUAL
CONNECT BY LEVEL <=264
)
SELECT *
from Months
如果您尝试创建日期范围,您可以这样做:
WITH Months AS (
SELECT LEVEL -1 AS ID
, ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), LEVEL -1) as start_dt
, ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), LEVEL ) as end_dt
FROM DUAL
CONNECT BY LEVEL <=264
)
SELECT *
from yourtable t
inner join Months m on t.somecol >= m.start_dt and t.somecol < m.end_dt
推荐阅读
- reactjs - 为什么我的字段在 handleChange 中不同?
- wordpress - 如何在 woocommerce 中向此函数添加父类
- javascript - 按宽度排列标签以适应容器
- pandas - 在 pandas 中创建分层列的问题
- html - 隐藏/显示内容 - 仅 CSS
- javascript - 按顺序解决承诺的麻烦
- azure-logic-apps - 如何查看其中一个运行历史记录条目的所有变量及其值的列表?
- javascript - 为什么 JavaScript textContent 不在此代码中分配正确的文本?
- excel - 数据透视表过滤器未更改为循环中的每个值
- python - 将 python 3.6 升级到 3.7 和 scikit-learn 0.19 升级到 0.23 时 PCA 的收敛变化