【问题标题】:how to save date into day, months and years separately in oracle 10g如何在 oracle 10g 中将日期分别保存为日、月和年
【发布时间】:2014-08-25 04:25:01
【问题描述】:

我正在为这家商店设计一个数据库,他们需要该应用程序能够计算每月利润。 我的问题是我可以使用 SYSDATE 检索系统的当前日期。但这给了我一个单一的值,比如 04-JUL-2014。 我想将日期存储在三个单独的列 DATE、MONTH 和 YEAR 中,以便我可以简单地执行诸如 select * from <table> where MONTH = MARCH 之类的选择语句。 如果有人知道如何进行这种转换,请告诉我。提前致谢。

【问题讨论】:

    标签: sql oracle date


    【解决方案1】:

    一般来说,最好将日期存储为 DATE(或 TIMESTAMP)数据类型,并使用 EXTRACT() 和 TO_CHAR() 等函数来获取日期的各个部分。

    如果您希望对常用报告(例如基于月利润的示例)进行易于编写的查询,您始终可以在表格上构建视图(或具体化视图)。例如:

    create view Profit_By_Month as
    select 
        extract(YEAR from some_date_column) as year, 
        extract(MONTH from some_date_column) as month, 
        sum(profit) as profit 
    from sales 
    group by 
        extract(YEAR from some_date_column), 
        extract(MONTH from some_date_column)
    

    然后你可以这样做:

    select year, month, profit from Profit_By_Month order by year, month
    

    【讨论】:

      【解决方案2】:

      考虑使用the EXTRACT function

      SELECT EXTRACT(YEAR FROM SYSDATE) AS YEAR,
             EXTRACT(MONTH FROM SYSDATE) AS MONTH,
             EXTRACT(DAY FROM SYSDATE) AS DAY
             FROM DUAL;
      

      【讨论】:

        【解决方案3】:

        Oracle 提供了一个 EXTRACT 函数,可以让您根据日期的组成部分进行查询。例如,如果您想将 3 月份的利润相加,您可以执行以下操作:

        SELECT SUM(profit)
        FROM sales
        WHERE EXTRACT(month FROM sales.date) = 3
        

        将日期存储在 DATE 列中比将组件分解为单独的列更灵活,因为它允许您运行尚未预料到的查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多