我正在为这家商店设计数据库,他们需要应用程序才能计算每月利润。
我的问题是我可以使用SYSDATE检索系统的当前日期。但这给了我一个单一的价值,如04-JUL-2014。
我想将日期存储在三个单独的列 DATE,MONTH和YEAR 中,以便我可以简单地执行一个像select * from <table> where MONTH = MARCH
等选择语句。
如果有人知道如何进行此转换,请告诉我。提前谢谢。
答案 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列中比将组件拆分为单独的列更灵活,因为它允许您运行尚未预料到的查询。