首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较甲骨文11g中的月份和日的值,并在where子句中使用它?

如何比较甲骨文11g中的月份和日的值,并在where子句中使用它?
EN

Stack Overflow用户
提问于 2017-06-21 12:44:15
回答 1查看 633关注 0票数 0

我有一个表“table1”,一年中的月份从1到12行编号,1到31天的月份以列的形式表示。

还有另一个表“table2”,其中存储日期和一些其他值。日期具有日期数据类型。我需要从那个'table2‘中获取日期,比较月和日的值,并相应地将值插入'table1’。示例如果“table2”的日期为21-6月-2017年,则应在“表1”中的第21冒号(日)和第6行(月份)中插入值。如何使用SQL在Oracle 11g中实现相同的功能?

谢谢你提前帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-21 12:59:14

Oracle安装

简化您的表-不要存储32列(月份和31天),而只是存储月份、日期和值,并根据需要对输出进行PIVOT

代码语言:javascript
复制
CREATE TABLE table1 (
  month NUMBER(2,0),
  day   NUMBER(2,0),
  value VARCHAR2(4000)
);

INSERT INTO table1
  SELECT EXTRACT( MONTH FROM date_column ),
         EXTRACT( DAY   FROM date_column ),
         value
  FROM   table2;

查询

代码语言:javascript
复制
SELECT month, d1, d2, d3, d4, /* ..., */ d31
FROM   table1
PIVOT  ( MAX( value ) FOR day IN (
           1 AS d1, 2 AS d2, 3 As d3, 4 AS d4, /* ..., */ 31 AS d31
       ) );

更新

表1的DDL:- 创建表table1 (月号、1号、2号、...31号);

您可以使用:

代码语言:javascript
复制
INSERT INTO table1
  SELECT month, d1, d2, /* ..., */ d31
  FROM   ( SELECT EXTRACT( MONTH FROM date_column ) AS month,
                  EXTRACT( DAY   FROM date_column ) AS day,
                  value
           FROM   table2 )
  PIVOT  ( MAX( value ) FOR day IN (
             1 AS d1, 2 AS d2, /* ..., */ 31 AS d31
         ) );

或者,如果要更新现有行,请使用MERGE INTO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44676524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档