#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 является более гибким, чем разделение компонентов на отдельные столбцы, поскольку это позволяет запускать запросы, которые вы еще не ожидали.