Это, очевидно, маска формата date . Если вы собираетесь сохранять даты в этом столбце, вы должны использовать тип данных DATE
, например
SQL> create table test
2 (datum date);
Table created.
Не используйте для этого типы данных VARCHAR2
(вставляйте строки, а не даты) и NUMBER
(вставляйте цифры, а не даты). Вы пожалеете об этом раньше, чем думаете.
Я собираюсь ввести некоторые значения в таблицу, показывая различные способы, как вы могли бы сделать это - важно, чтобы вы вставляли в нее даты, а не строки. Никогда не полагайтесь на Oracle, неявно преобразуя строки, которые вы можете предоставить, в даты. Рано или поздно произойдет ошибка.
SQL> insert into test values (date '2018-12-25');
1 row created.
SQL> insert into test values (to_date('09.05.2018', 'dd.mm.yyyy'));
1 row created.
SQL> insert into test values (sysdate);
1 row created.
Теперь, несколько способов выбора этого значения:
Эта дата возвращает дату в формате, установленном в настоящее время настройками NLS моей базы данных:
SQL> select * from test;
DATUM
--------
25.12.18
09.05.18
09.05.18
Я заставляю его возвращать значения в нужном формате, используя ALTER SESSION:
SQL> alter session set nls_date_format = 'yyyy-mm-dd';
Session altered.
SQL> select * from test;
DATUM
----------
2018-12-25
2018-05-09
2018-05-09
еще один формат; обратите внимание, что значение, вставленное с помощью функции SYSDATE (которая возвращает DATE), содержит компонент даты и Это было «невидимо» в предыдущих примерах:
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> select * from test;
DATUM
-------------------
25.12.2018 00:00:00
09.05.2018 00:00:00
09.05.2018 08:03:50
Использование функции TO_CHAR с некоторым форматом (например, dd-mon-yyyy). Я также прошу Oracle «перевести» название месяца на английский (поскольку моя база данных работает на хорватском языке):
SQL> select to_char(datum, 'dd-mon-yyyy', 'nls_date_language = english') datum from test;
DATUM
-----------
25-dec-2018
09-may-2018
09-may-2018
SQL>
[EDIT]
Oracle не хранит значения DATE в каком-либо «читаемом» формате (читайте в Интернете больше, Google для этого). Это маска формата, которая представляет это значение для вас.
Я настоятельно предлагаю вам НЕ сохранять даты в любом столбце типа данных, кроме DATE. Это бомба замедленного действия, ожидающая взрыва (а потом будет больно). Никто не мешает вам ввести значение как «1234-99-66» или «12 -345-678»; что ты будешь с этим делать тогда?
Рассмотрите возможность создания представления в верхней части таблицы, которое использует функцию TO_CHAR и возвращает значение в нужном формате ('гггг-мм-дд'). Столбец типа данных DATE в таблице гарантирует, что значения действительны , и представление позволит стороннему приложению принимать значения, которые оно сочтет подходящими.
Например:
SQL> create view v_test as
2 select to_char(datum, 'yyyy-mm-dd') datum
3 from test;
View created.
SQL> select * from v_test;
DATUM
----------
2018-12-25
2018-05-09
2018-05-09
SQL>
Итак: вы не позволили бы стороннему приложению получить доступ к таблице, но вместо этого к представлению.