Некий сервер отправляет по электронной почте отчеты. В поле Тема ставится дата. Заказчик попросил добавить к дате день недели.
Календарь - вещь сложная. В году 12 месяцев, в каждом месяце разное количество дней, дни недели идут подряд, но как их определить? Программирование этой задачи "в лоб" оказалось бы довольно сложным: определить по дате порядковый номер дня недели, иметь словарь наименований дней недели. Oracle дает очень простое решение этой задачи.
Текущую дату (и время с точностью до секунды) мы всегда можем получить при помощи функции sysdate:
select sysdate from dual
;
12.04.21
Есть маленький нюанс: дата для Oracle - это целое число секунд с начала "эпохи Юникса", т.е. с полуночи первого января 1970-го года. Соответственно, когда мы видим что-то типа '12.04.21', то это не дата, а преобразование даты к некоторому строковому формату.
Например, если мы хотим получить год в виде 4-значного числа, то мы должны выполнить преобразование даты к строке в явном виде:
select to_char(sysdate, 'dd.mm.yyyy') from dual
;
12.04.2021
Точно так же, если мы хотим получить время, то должны это явно указать:
select to_char(sysdate, 'dd.mm.yyyy hh24:mi:ss') from dual
;
12.04.2021 23:41:33
И опять же, если нам поступил заказ показать день недели, то нам надо просто спросить Oracle об этом - а он знает:
select to_char(sysdate, 'dd.mm.yyyy hh24:mi:ss day') from dual
;
12.04.2021 23:43:45 monday
Тогда нам нужно сделать переводчик с английского на русский?? Нет, не нужно, Oracle знает языки, ему просто нужно сказать, какой язык нам нужен:
select to_char(sysdate, 'dd.mm.yyyy hh24:mi:ss day', 'nls_date_language=russian') from dual
;
12.04.2021 23:46:03 понедельник
А, например, финский? Запросто:
select to_char(sysdate, 'dd.mm.yyyy hh24:mi:ss day', 'nls_date_language=finnish') from dual
;
12.04.2021 23:48:01 maanantai
Французский?
select to_char(sysdate, 'dd.mm.yyyy hh24:mi:ss day', 'nls_date_language=french') from dual
;
12.04.2021 23:49:04 lundi
Просто указывая параметр, без всякого программирования - мы решаем довольно сложную задачу.