#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 для сохранения даты / времени.