PL / SQL как сравнивать даты в проце - PullRequest
1 голос
/ 10 августа 2011

Даты в моей БД хранятся так: «6/2/2009 18:30:00 PM». Как правильно сравнить эту дату с датой, которую я передаю из своего пользовательского интерфейса в хранимой процедуре?

Попытка сделать что-то вроде TE_ES_ACT_END_DATETIME <'06.02.2009 07:30:00', но это не работает Какие-либо предложения? Спасибо! </p>

1 Ответ

2 голосов
/ 10 августа 2011

Используйте функцию TO_DATE для перевода текста в дату.

Вроде так:

to_date('2/6/2009 6:30:00 PM', 'MM/DD/YYYY HH12:MI:SS AM')

Если вы используете имя поля вместо постоянной строки, вы получите значение поля, переведенное в дату. Вы можете сравнить его в своем запросе или вернуть и сравнить его в коде PL / SQL, используя обычные операторы> или <. </p>

Но, конечно, лучше сохранить дату как дату. :) Если хотите, вы можете сделать пошаговое преобразование:

Сначала добавьте столбец даты в таблицу и напишите триггер, который обновляет поле stringdate всякий раз, когда вводится дата.

  create or replace trigger DATESYNC before insert or update of YOURNEWDATEFIELD
  on YOURTABLE for each row
  begin
    :new.CURRENTSTRINGDATE := to_char(:new.YOURNEWDATEFIELD, 'MM/DD/YYYY HH12:MI:SS AM');
  end;

Затем отредактируйте графический интерфейс, который вы используете для ввода даты в поле даты вместо строкового поля. Весь другой код все еще будет использовать строковое поле и будет продолжать работать. Напишите оператор обновления, который использует to_data для преобразования каждого текста в дату.

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

После того, как весь код преобразован, удалите строковое поле и триггер.

Это сделает ваш код быстрее, ваши данные более компактными, а ваши запросы будут лучше использовать индексы в поле даты.

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