Я новичок в программировании баз данных Oracle и хочу ВСТАВИТЬ дату (также отображать) в формате «DD MON YYYY». (PS: это касается только события INSERT). Какой тип данных (DATE или TIMESTAMP) является наиболее подходящим вариантом для реализации этого формата? Как я должен был это сделать? Спасибо.
Как отобразить ДАТУ в формате «ДД МЕСЯЦ ГГГГ»?
Ответы (3)
Столбец DATE
не имеет никакого формата.
Таким образом, формат, который вы используете при вставке или обновлении данных, не имеет значения для отображения этих данных (это одна из причин, по которой вам никогда не следует хранить дату в столбце VARCHAR
).
Любой отформатированный вывод, который вы видите для столбца DATE
в вашем инструменте SQL (например, SQL * Plus), применяется этим инструментом. Это не часть данных, хранящихся в этом столбце.
При предоставлении литерала даты вы должны либо использовать функцию to_date()
с явной маской формата:
insert into some_table (some_date_column)
values (to_date('27-06-2014', 'dd-mm-yyyy'));
Я также не рекомендую использовать форматы с письменными названиями месяцев (27-JUN-2014) при предоставлении литерала даты, потому что они также зависят от настроек NLS клиентского компьютера и могут вызывать (случайные) ошибки из-за на разные языки. Использование только чисел намного надежнее.
Я предпочитаю использовать литералы даты ANSI, потому что это немного меньше:
insert into some_table (some_date_column)
values (DATE '2014-06-27');
Формат литерала даты (или метки времени) ANSI всегда соответствует формату ISO (гггг-мм-дд).
Когда вы выбираете свои данные, вы можете отображать дату в любом формате, который вам нравится. Либо с помощью функции to_char()
(например, при использовании инструмента SQL), либо с помощью функций вашего языка программирования (предпочтительный способ использования внутри приложения):
select to_char(some_date_column,'dd-mon-yyyy')
from some_table;
Обратите внимание, что тип данных DATE
в Oracle (несмотря на его название) также хранит время. TIMESTAMP
делает то же самое, только с большей точностью (включая миллисекунды, тогда как тип данных DATE
хранит только секунды).
DATE
хранится без какого-либо формата. Это приложение применяет это форматирование (клиентские инструменты Oracle, как правило, используют настройки NLS из переменных среды - я не знаю, как это делает APEX)
- person a_horse_with_no_name; 27.06.2014
Чтобы вставить запись,
INSERT INTO TABLE_NAME (DATE_FIELD) VALUES (TO_DATE ('27-JUN-2014', 'DD-MON-YYYY');
Рекомендуется использовать тип данных DATE до тех пор, пока вам не понадобится точность даты до миллисекунд. В вашем случае используйте тип данных DATE, а TIMESTAMP не требуется.
Чтобы выбрать запись,
SELECT TO_CHAR(DATE_FIELD, 'DD-MON-YYYY') FROM TABLE_NAME;
В общем, запомните это:
- TO_DATE – это функция, используемая для преобразования строки (CHAR) в дату.
- TO_CHAR – это функция, используемая для преобразования DATE в строку (CHAR).
В этом сценарии вам подойдет тип данных даты, и для желаемого формата вы должны попробовать следующее:
INSERT INTO TABLE_NAME(DATE_COLUMN) VALUES('27-JUN-2014');
Надеюсь, это поможет вам.