Получение диапазона в SQL при задании между - PullRequest
2 голосов
/ 14 января 2012

Мне интересно, возможно ли (без фактического разбора данной строки) получить фактический диапазон (в днях, минутах или секундах), который указан, когда у вас есть SQL-оператор, такой как

[select 'x'
from dual
where date between to_date('20111113152049')
and to_date('20120113152049')]

Я работаю над запросом, в котором мне дана строка в виде

"between to_date(A) and to_date(B)" 

, и я хотел бы получить это значение в днях, чтобы сравнить его с политикой, которую мы позволяем пользователю установить, чтобы он неt введите диапазон дат длиннее, чем, скажем, неделю.

1 Ответ

1 голос
/ 14 января 2012

Если вы ищете теоретический ответ (то есть: не вводите его в производство), это может сработать:

Предварительные условия: иметь три таблицы: days_seq (day_seq), month_seq (mth_seq) иyear_seq (yr_seq) days имеет номера 1 ... 31, месяц 1..12, годы 2011 ....?

Использовать следующий запрос (я использовал доступ, потому что у меня нет доступных доступных СУБДздесь, имейте в виду, что MS-ACCESS / JET простит использование функции Dateserial, то есть она не прерывается, когда вы запрашиваете серию даты для 30 февраля 2012 г.)

SELECT Max(DateSerial(
    [year_seq]![yr_seq]
   ,[month_seq]![mth_seq]
   , [days_seq]![day_seq])) 
   -
   Min(DateSerial(
     [year_seq]![yr_seq]
    ,[month_seq]![mth_seq]
    ,[days_seq]![day_seq])) AS days
FROM days_seq, month_seq, year_seq
WHERE DateSerial(
        [year_seq]![yr_seq]
       ,[month_seq]![mth_seq]
       ,[days_seq]![day_seq])
BETWEEN #2012-02-1# AND #2012-02-28#

В основном запрос производит картезианский продукт из трех таблиц, который генерирует все возможные дни в месяцах, месяцы в году на столько лет, сколько у вас есть в таблице лет.

Бонус: вы можете сгенерировать перманент вне курсаКалендарная таблица, как предлагает X-Zero.

настольный календарь ([дата])

  INSERT INTO calendar
    SELECT DISTINCT DateSerial(
        [year_seq]![yr_seq]
       ,[month_seq]![mth_seq]
       , [days_seq]![day_seq])) 
    FROM days_seq, month_seq, year_seq

Вам все еще нужно выбирать свой начальный год и год окончания с умом.В соответствии с окончанием Майя 21 декабря 2012 года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...