как сохранить дату в виде дней, месяцев и лет отдельно в oracle 10g

#sql #oracle #date

#sql #Oracle #Дата

Вопрос:

Я разрабатываю базу данных для этого магазина, и им нужно, чтобы приложение могло рассчитывать ежемесячную прибыль. Мой вопрос заключается в том, что я могу получить текущую дату системы, используя SYSDATE. Но это дает мне единственное значение в одном столбце, например 04 июля 2014. Я хочу сохранить дату в трех отдельных столбцах ДАТА, МЕСЯЦ и ГОД, чтобы я мог просто выполнить оператор select, такой select * from <table> where MONTH = MARCH как и т.д. Если кто-нибудь знает, как выполнить это преобразование, пожалуйста, скажите мне. Заранее спасибо.

Ответ №1:

В общем, рекомендуется сохранять дату как тип данных DATE (или ВРЕМЕННАЯ МЕТКА) и использовать такие функции, как 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:

Рассмотрите возможность использования EXTRACT функции.

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

Ответ №3:

Oracle предоставляет функцию ИЗВЛЕЧЕНИЯ, которая позволит вам выполнять запросы на основе компонентов даты. Например, если вы хотите подсчитать прибыль за март, вы могли бы сделать что-то вроде этого:

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

Сохранение даты в столбце DATE является более гибким, чем разделение компонентов на отдельные столбцы, поскольку это позволяет запускать запросы, которые вы еще не ожидали.