Какой наиболее идеальный подход для проверки значений даты с помощью Oracle

#sql #oracle #oracle11g

#sql #Oracle #oracle11g

Вопрос:

Конкретный столбец моей таблицы — hour_init, а другой — hour_end. Я пытаюсь создать контрольное ограничение, которое определяет, следуют ли этим правилам hour_init и hour_end:

  • Правило 1: Формат должен быть HH: MM
  • Правило 2: HH должно быть меньше 24
  • Правило 3: MM должно быть меньше 59

Я прочитал и / или разобрался с некоторыми подходами, но я не могу решить, что было бы «наилучшей практикой» или идеальным решением.

Подход 1:

Создайте таблицу с 2 столбцами типа varchar2. Создайте контрольное ограничение, которое разбивает каждый varchar2 на подстроки (после и перед «:»), преобразует подстроки в числа и проверяет, соответствуют ли они правилам 2 и 3. Я не знаю, насколько плох или хорош этот метод.

Подход 2:

Создайте таблицу с 2 столбцами типа DATE или TIMESTAMP. Затем отформатируйте эти даты в HH: MM, затем проверьте, соответствует ли введенное значение, его час и минута правилам 2 и 3.

Какой подход следует выбрать?

Комментарии:

1. Почему бы не использовать type INTERVAL DAY TO SECOND , который немного более детализирован, чем вам нужно, но, по крайней мере, он набран правильно. Затем вы можете вставить 9 часов и 30 минут (например) с помощью литерала INTERVAL '09:30' HOUR TO MINUTE

Ответ №1:

На мой взгляд, никогда не храните значения даты (или времени) в VARCHAR2 столбцах. Никаких преимуществ, много недостатков.

Ответ №2:

если вы создаете столбцы как DATE или какой-либо вариант TIMESTAMP (в зависимости от необходимой вам детализации), проверять нечего. Oracle не позволит вам вводить недопустимое значение ни в один из этих типов данных. Это одна из многих причин, по которой вам НИКОГДА не следует использовать varchar2 или number для сохранения даты / времени.