Как вытащить дату из базы данных в удобном формате d.m.Y. (день.месяц.год) Oracle . Нам поможет функция to_char(). Благодаря ей можно преобразовать время в нужный формат. Посмотрите на пример.
SELECT to_char(current_timestamp, "DD.MM.YYYY") as date_create from DUAL
Формат времени DD.MM.YYYY (день.месяц.год). Вы можете использовать любые символы в качестве разделителей: /, :, -.
Для вывода текущего времени в формате день.месяц.год часы:минуты:секунды используйте параметры DD.MM.YYYY HH24:MI:SS.
SELECT to_char(current_timestamp, "DD.MM.YYYY HH24:MI:SS") as date_create from DUAL /* вывод: 06.10.2017 16:50:52 */
Допустим, нужно вывести начало года? У вас автоматически будет подставляться текущий год. В этом примере применил конкатенацию ||. Более подробную информацию вы найдёте на странице TO_CHAR ФУНКЦИЯ . На той странице находится большой список параметров для преобразования даты в строку.
SELECT "01.01." || to_char(current_timestamp, "YYYY") as date_create from DUAL
Просмотры: 1762, уровень: лёгкий уровень, рейтинг: 0 , дата: 2016-10-26 14:07:32
Функции работы с датами
Функция |
Возвращаемое значение |
ADD-MONTHS (d,n) |
Дата d плюс n месяцев. |
Последнее число месяца, указанного в d |
|
MONTHS-BETWEEN (d,e) |
Число месяцев между датами d1 и d2. |
NEW-TIME (d,a,b) |
Дата и время в часовом поясе a, соответствующие дате и времени в часовом поясе b, при этом d,a и b значения типа CHAR, определяющие часовые пояса. |
NEW-DAY (d,char) |
Дата первого после даты (/дня недели, название которого записано в с1шг. |
Текущая дата и время. |
Усечение и округление дат
Форматные маски дат для функций ROUND и TRUNC.
В таблице перечислены форматные маски, которые можно использовать в функциях ROUND и TRUNC. По умолчанию используется форматная маска "DD".
Форматная маска |
Возвращаемое значение |
Первый день столетия |
|
SYYYY или YYYY или YYY или YY или Y или YEAR или SYEAR |
|
Первый день квартала (округляется до 16 числа второго месяца квартала) |
|
MONTH или MON или MM или RM |
Первый день месяца (округляется до 16 числа) |
Тот же день недели, что и первый день текущего года |
|
Тот же день недели, что и первый день текущего месяца |
|
DDD или DDD или J |
|
DAY или DY или D |
Первый день недели |
Функции преобразования
Возвращаемое значение |
|
CHARTOROWID(char) |
Char преобразуется из типа данных CHAR в тип данных ROWID |
CONVERT(char, dest_char_set [,source_char_set]) |
Преобразует символьную строку из набора символов source_char_set в набор символов dest_char_set |
Преобразует значение char, содержащее шестнадцатиричные цифры, в значение типа данных RAW |
|
Преобразует raw в символьное значение, содержащее его шестнадцатиричный эквивалент |
|
ROWIDTOCHAR (rowid) |
Преобразует значение типа ROWID в значение типа CHAR |
TO_CHAR (expr [,fmt [,"nls_num_fmt"]]) |
Преобразует значение expr типа DATE или NUMBER в значение типа CHAR по формату форматной маски fmt. Если fmt отсутствует, значения типа DATE преобразуются по формату, заданному по умолчанию, и значения типа NUMBER- в значение типа CHAR с шириной, достаточной для того, чтобы вместить все значащие цифры. Значение "nls_num_fmt" определяет связанные с языком форматные маски. В Trusted ORACLE преобразует значения MLS или MLS_LABEL в значение типа VARCHAR2 |
TO_DATE (char[,fmt [,"nls_lang"]]) |
Преобразует char в значение типа DATE с помощью форматной маски fmt. Если fmt опускается, используется форматная маска для даты, принятая по умолчанию."nls_ang" задает язык, используемый в названиях месяцев и дней |
TO_MULTI_BYTE (char) |
Преобразует однобайтовые символы, имеющие многобайтовые эквиваленты, в соответствующие многобайтовые символы |
TO_NUMBER (char [,fmt [,"nls_lang"]]) |
Преобразует char, содержащее число в формате, указанном параметром fmt, в значение типа NUMBER. "nls_lang" задает язык, определяющий символы валют и числовые разделители |
TO_SINGLE_BYTE (char) |
Преобразует многобайтовые символы, имеющие однобайтовые эквиваленты, в соответствующие однобайтовые символы |
Форматные маски.
Этот раздел описывет форматные маски дат и чисел.
Форматные маски дат в TO_CHAR и TO_DATE.
Элементы форматной маски даты перечислены в приведенной ниже таблице. Любую комбинацию этих элементов можно использовать как аргумент fmt функций TO_CHAR или TO_DATE. По умолчанию fmt равен "DD-MON-YY".
Элемент формата |
Возвращаемое значение |
Столетие; если указано "S" то перед датами до нашей эры ставится "-". |
|
YYYY или SYYYY |
Год; если указано"S" то перед датами до нашей эры ставится "-". YYY или YY или Y] Последние 3, 2, или1 цифра года. |
4 цифры года по стандарту ISO. IYY или IY или I] Последние 3, 2, или1 цифра года по стандарту ISO. |
|
Год с запятой в указанной позиции. |
|
SYEAR или YEAR |
Год, записанный словами, а не цифрами; если указано"S" то перед датами до нашей эры ставится "-". |
Последние 2 цифры года; для указания года в других столетиях. |
|
BC- до нашей эры(до н.э.); AD - нашей эры |
|
B.C. или A.D. |
B.C.- до нашей эры(до н.э.); A.D. - нашей эры |
Нумерация месяцев римскими цифрами(I-XII; JAN=I). |
|
Название месяца, дополненное пробелами до 9-ти символов. |
|
Сокращенное название месяца. |
|
Неделя года (1-52) или месяца (1-5). |
|
Неделя года (1-52 или 1-53) по стандарту ISO. |
|
DDD или DD или D |
День года (1-366) или месяца (1-31) или недели (1-7). |
Название дня, дополненное пробелами до 9-ти символов. |
|
Сокращенное название дня. |
|
Дата юлианского календаря; число дней, считая с первого января 4712 года до н.э. |
|
AM -до полудня,PM- после полудня |
|
A.M. или P.M. |
A.M. -до полудня,P.M.- после полудня |
Час дня (1-12). |
|
Час дня (0-23). |
|
Минута (0-59) |
|
Секунда (0-59) или количество секунд после полуночи (0-86399). |
|
Знаки пунктуации. |
|
"...текст..." |
Текст воспр в возвращенном значении. |
Префикы и суффиксы элементов формата даты
К элементам формата даты можно добавлять следующие префиксы:
К элементам формата даты можно добавлятть следующие суффиксы:
Прописные и строчные буквы в элементах формата даты.
Следующие строки задают вывод прописными буквами, вывод прописными буквами только начальных букв слов, или вывод строчными буквами.
Если к элементу формата даты добавляется префикс или суффикс, то регистр (прописные, строчные буквы) определяется элементом формаиа, а не префиксом или суффиксом. Например, "ddTH " задает "04th" а не "04TH".
Элементы формата числа для TO_CHAR
В следующей таблице перечислены элементы формата числа. Комбинацию этих элементов можно использовать как аргумент fnu функции TO_CHAR.
Элемент |
Пример |
Описание |
Количество девяток указывает число возвращаемых значащих цифр. |
||
Добавляет нули перед числом. |
||
Добавляет знак доллара перед числом. |
||
Заменяет нулевые значения пробелами. |
||
Возвращает знак "-" после отрицательных значении. |
||
Возвращает знак "+" для положительных значений и знак "-" для отрицательных значений в указанную позицию. |
||
Возвращает отрицательные значения в <угловых скобках>. |
||
Возвращает символ, представляющий десятичную точку, в указанную позицию. |
||
Возвращает символ разделения цифр на группы в указанную позицию. |
||
Возвращает международной знак валюты в указанную позицию. |
||
Возвращает знак местной валюты в указанную позицию. |
||
Возвращает запятую в указанную позицию. |
||
Возвращает точку в указанную позицию. |
||
Умножает значение на 10 n , где n количество девяток после "V". |
||
Возвращает значение в нормализованной форме. В fnu должно быть ровно четыре буквы "Е". |
||
Возвращает римские цифры прописными или строчными буквами (целое число в диапазоне от 1 до 3999). |
||
Возвращает значение, преобразованное из даты юлианского календаря в формат "MM/DD/YY". |
В предыдущей статье мы рассмотрели встроенные функции для работы со строками. В данной статье речь пойдет о функциях работы с датой/временем и функциями предобразования типов для даты. Для хранения даты и времени в Oracle предусмотрен специальный тип DATE. С физической точки зрения это дробное число, целая часть которого хранит количество дней с некоторой базовой даты, а дробная - время. Это позволяет совершать над датами арифметические операции - сложение и вычитание.
Это одна из самых часто употребляемых функций, она возвращает текущую дату и время по часам сервера.
Возвращает последнее число месяца, указанного в дате d.
SELECT SYSDATE d,
LAST_DAY(SYSDATE) d1
Функция MONTH_BETWEEN возвращает количество месяцев между двумя датами d1 и d2 с учетом знака как d1-d2, возвращаемое число является дробным.
SELECT MONTHS_BETWEEN("2.09.2006", "2.05.2006") d1,
MONTHS_BETWEEN("12.09.2006", "2.05.2006") d2,
MONTHS_BETWEEN("2.05.2006", "12.09.2006") d3
Рассмотрим типовые примеры - усечение даты до часов, дней, месяца и года. Форматная маска по умолчанию равна «DD»
SELECT SYSDATE d1,
TRUNC(SYSDATE, "HH24") d2,
TRUNC(SYSDATE, "DD") d3,
TRUNC(SYSDATE, "MM") d4,
TRUNC(SYSDATE, "YYYY") d5
Рассмотрим подробнее форматные маски и особенности их применения.
Маска |
Назначение |
Первый день столетия |
|
YEAR, или YYYY, или YY, или Y |
Первый день года |
Первый день квартала |
|
MONTH, или MON, или MM |
Первый день месяца |
Тот же день недели, что и первый день текущего года |
|
Тот же день недели, что и первый день текущего месяца |
|
DAY, или DY, или D |
Первый день недели |
HH, или HH12, или HH24 |
|
Функция TO_DATE преобразует строку str в дату. Преобразование ведется по маске mask, если она указана. Если маска не указана, то берется маска по умолчанию. В случае указания маски можно указать еще один параметр - язык, используемый при форматировании названий месяцев и дней. В случае ошибки анализа строки str в соответствии с заданной маской возникает исключительная ситуация. Наиболее распространенная ошибка «ORA-01830: шаблон формата даты завершается перед преобразованием всей строки ввода». Кроме того, нередко встречается ошибка «ORA-01821: формат даты не распознан» - она возникает при указании недопустимой форматной маски.
SELECT TO_DATE("12.09.2006") d
Столетие, причем перед датами до нашей эры ставится знак «минус».
SELECT SYSDATE d1,
TO_CHAR(SYSDATE-1000000, "SCC") d2
26.09.2006 17:14:21 |
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "YYYY") d2
Год, записанный прописью c учетом текущего национального языка.
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "YEAR") d2
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "MM") d2
Название месяца прописью.
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "MONTH") d2
Неделя года.
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "WW") d2
День года.
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "DDD") d2
День недели прописью, при необходимости дополняется до девяти символов пробелами.
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "DAY") d2
Дата юлианского календаря. Является числом дней от 1.01.4712 до нашей эры.
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "J") d2
Час дня по 12-часовой шкале (1-12).
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "HH") d2
Минуты (0-59).
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "MI") d2
Данная форматная маска полезна для измерения временных интервалов в секундах.
Знаки пунктуации. Они выводятся в соответствующие места отформатированной даты.
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "DD.MM.YYYY HH24.MI") d2,
TO_CHAR(SYSDATE, "DD/MM/YYYY HH12.MI PM") d3
Элементы форматной маски, предназначенные для вывода текстовой информации, чувствительны к регистру - регистр управляет регистром форматируемого текста. Рассмотрим управление регистром на примере форматной маски DAY:
SELECT SYSDATE d1,
TO_CHAR(SYSDATE, "DAY") d2,
TO_CHAR(SYSDATE, "Day") d3,
TO_CHAR(SYSDATE, "day") d4
26.09.2006 17:47:45 |
Несложно заметить, что если маска записана в верхнем регистре, то и форматируемое текстовое значение возвращается в верхнем регистре. Если в нижнем - форматируемое значение тоже будет в нижнем. И наконец, запись маски с прописной буквы приводит к форматированию формируемого текста таким образом, чтобы он начинался с прописной буквы.
В данной статье мы рассмотрели все основные встроенные функции Oracle, предназначенные для работы с датами и выполнения операций преобразования типов с типом «дата». В следующей статье мы рассмотрим функции преобразования и форматирования чисел и перейдем к рассмотрению практических запросов, использующих рассмотренные ранее функции.