[TL; DR] Используйте литерал даты:
CREATE TABLE customer1 (
custmer_id NUMBER,
Customer_name VARCHAR2(20),
Expiry_date DATE DEFAULT DATE '2009-12-31'
)
или модель формата MM
:
CREATE TABLE customer1 (
custmer_id NUMBER,
Customer_name VARCHAR2(20),
Expiry_date DATE DEFAULT TO_DATE ('31-12-2009','DD-MM-RRRR')
)
Из Oracle Модели формата даты и времени :
MM
: месяц (01-12; январь = 01). MON
: сокращенное название месяца. MONTH
: имя месяца, дополненное пробелами для отображения ширины самого широкого имени месяца на языке дат, используемом для этого элемента.
Oracle's String-to-Даты преобразования правил разрешают дополнительные правила форматирования (без применения других модификаторов).Итак:
MM
также соответствует MON
и MONTH
; MON
соответствует MONTH
(и наоборот); RR
совпадений RRRR
;и - Пунктуация необязательна.
Используемая вами модель формата dd-mon-RR
может соответствовать любому из (с дефисами или без них):
31-dec-09
31-december-09
31-dec-2009
31-december-2009
Но модель формата MON
также несоответствует формату MM
, поэтому не может соответствовать вашей строке.
Вместо этого следует использовать модель формата DD-MM-RR
(или DD-MM-RRRR
), которая может соответствовать (опять же, с дефисами или без них):
31-12-09
31-dec-09
31-december-09
31-12-2009
31-dec-2009
31-december-2009
Если вы хотите сопоставить только один формат даты, либо:
- Используйте литерал даты
DATE '2009-12-31'
(который использует только ISO-8601формат даты, поэтому пропускает вопрос ввода, не соответствующий модели формата);или - Используйте модификатор модели формата
FX
TO_DATE( '31-12-2009', 'FXDD-MM-RRRR' )
*, который предотвратит применение правил преобразования строки в дату и потребует, чтобы входные данные точно соответствовали модели формата.