Сайт о телевидении

Сайт о телевидении

» » Перевод даты в запросе oracle. Краткое практическое руководство разработчика информационных систем на базе субд oracle

Перевод даты в запросе oracle. Краткое практическое руководство разработчика информационных систем на базе субд oracle

Как вытащить дату из базы данных в удобном формате 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. С физической точки зрения это дробное число, целая часть которого хранит количество дней с некоторой базовой даты, а дробная - время. Это позволяет совершать над датами арифметические операции - сложение и вычитание.

Функция SYSDATE

Это одна из самых часто употребляемых функций, она возвращает текущую дату и время по часам сервера.

Функция LAST_DAY(d)

Возвращает последнее число месяца, указанного в дате d.

SELECT SYSDATE d,

LAST_DAY(SYSDATE) d1

Функция MONTHS_BETWEEN(d1, d2)

Функция 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

Форматные маски, допустимые для функций TRUNC и ROUND

Рассмотрим подробнее форматные маски и особенности их применения.

Маска

Назначение

Первый день столетия

YEAR, или YYYY, или YY, или Y

Первый день года

Первый день квартала

MONTH, или MON, или MM

Первый день месяца

Тот же день недели, что и первый день текущего года

Тот же день недели, что и первый день текущего месяца

DAY, или DY, или D

Первый день недели

HH, или HH12, или HH24

Функция TO_DATE(str[,mask [,nls_lang]])

Функция TO_DATE преобразует строку str в дату. Преобразование ведется по маске mask, если она указана. Если маска не указана, то берется маска по умолчанию. В случае указания маски можно указать еще один параметр - язык, используемый при форматировании названий месяцев и дней. В случае ошибки анализа строки str в соответствии с заданной маской возникает исключительная ситуация. Наиболее распространенная ошибка «ORA-01830: шаблон формата даты завершается перед преобразованием всей строки ввода». Кроме того, нередко встречается ошибка «ORA-01821: формат даты не распознан» - она возникает при указании недопустимой форматной маски.

SELECT TO_DATE("12.09.2006") d

Форматные маски, допустимые для функций TO_CHAR в случае форматирования даты

Столетие, причем перед датами до нашей эры ставится знак «минус».

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, предназначенные для работы с датами и выполнения операций преобразования типов с типом «дата». В следующей статье мы рассмотрим функции преобразования и форматирования чисел и перейдем к рассмотрению практических запросов, использующих рассмотренные ранее функции.