如何在oracle 10g中分别将日期保存到日,月和年

时间:2014-07-03 22:06:05

标签: sql oracle date

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

3 个答案:

答案 0 :(得分:4)

通常,最佳做法是将日期存储为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

答案 1 :(得分:1)

考虑使用the EXTRACT function

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

答案 2 :(得分:1)

Oracle提供了一个EXTRACT函数,可以让您根据日期的组件进行查询。例如,如果你想在3月份累加利润,你可以这样做:

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

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