oracle последний день года

Oracle LAST_DAY

The Oracle LAST_DAY() takes a DATE argument and returns the last day of the month of that date.

Syntax

The following illustrates the syntax of the Oracle LAST_DAY() function:

Arguments

The LAST_DAY() function accepts one argument:

1) date

The date argument is a DATE value or any expression that evaluates to a DATE value of which you want to get the last day of the month.

Return value

The Oracle LAST_DAY() function always returns a DATE value that represents the last day of the month of that input date.

Examples

Let’s look at the following examples of using the LAST_DAY() function.

A) Get the last day of the current month

The following example returns the last day of the current month:

In this example, the SYSDATE function returns the current system date which is used as an input date for the LAST_DAY() function.

B) Calculate the number of days left of the current month

The following example returns the number of days left in the current month:

C) Return the last day of the last/next month

The following example uses the ADD_MONTHS() function to add and subtract one month and returns the last day of the last and the next month:

Here is the result:

oracle последний день года. Смотреть фото oracle последний день года. Смотреть картинку oracle последний день года. Картинка про oracle последний день года. Фото oracle последний день года

D) Get the last day of February of the leap years

The following example shows how to use the LAST_DAY() function to get the last day of the month February in both leap years and non-leap years:

The following picture illustrates the output of the query:

oracle последний день года. Смотреть фото oracle последний день года. Смотреть картинку oracle последний день года. Картинка про oracle последний день года. Фото oracle последний день года

In this tutorial, you have learned how to use the Oracle LAST_DAY() function to get the last day of the month of a specified date.

Источник

Мой блог

среда, 2 июля 2014 г.

Дата и время в Oracle

Форматы даты по умолчанию:

select sysdate from dual;

При вставке в таблицу значений типа date, по умолчанию можно использовать литерал в формате

DD-MON-YYYY
(две цифры номера дня, три буквы месяца и четыре цифры года)

insert into t1 (d) values (’28-APR-1971′);

или использовать ключевое слово DATE для передачи в базу литерала типа data в формате ANSI

YYYY-MM-DD
(четыре цифры года, две цифры месяца, две цифры номера дня)

insert into t1 (d) values ( DATE ‘1971-04-28’);

Конвертация даты в строку:

select to_char(sysdate) from dual;

02 ИЮЛЬ 2014 17:00:51

select to_char(sysdate, ‘CC‘) from dual; — двузначное столетие (век)

Немного о стандарте ISO.

В стандарте ISO, год, относящийся к номеру недели ISO, может отличаться от календарного года.

1 января 1988 года попадает на 53-ю неделю ISO для 1987 года.
Неделя всегда начинается с понедельника и заканчивается воскресеньем.

Как связан год с номером недели по стандарту ISO:

Если 1 января падает на пятницу, субботу или воскресенье, то неделя, включающая 1 января,
считается последней неделей предыдущего года, потому что большинство дней этой недели
принадлежат предыдущему году.

Если 1 января падает на понедельник, вторник, среду или четверг, то эта неделя считается
первой неделей нового года, потому что большинство дней этой недели принадлежат новому году.

1 января 1991 падает на вторник, поэтому неделя с понедельника, 31 декабря 1990 по воскресенье, 6 января 1991 считается неделей 1.

Чтобы получить номер недели ISO, используйте маску формата ‘IW‘ для номера недели и одну из масок вида ‘IY‘ для года.

в данном случае результаты совпадают.

Попробуем с другой датой:

Как видим результаты разные.

При вставке в таблицу даты, рекомендуется указывать все четыре цифры года.
Если указать только две последние цифры года, то две первые цифры (столетие)
Oracle будет интерпретировать в зависимости от того, какой формат был использован при вводе.
Если использовать формат YY, то в качестве столетия будет использовано текущее столетие,
которое в настоящее время установлено на сервере.

select
to_char(to_date(’28-04-14′, ‘DD-MM-YY‘), ‘DD-MM-YYYY’),
to_char(to_date(’28-04-77′, ‘DD-MM-YY‘), ‘DD-MM-YYYY’)
from dual;

Неважно какой год мы указали, столетие всегда будет текущее (т.е. 20)

Если использовать формат YYYY но при этом указать только две последние цифры года
то в качестве столетия Oracle подставит нули (т.е. 00)

select
to_char(to_date(’28-04-14′, ‘DD-MM-YYYY‘), ‘DD-MM-YYYY’),
to_char(to_date(’28-04-77′, ‘DD-MM-YYYY‘), ‘DD-MM-YYYY’)
from dual;

Если использовать формат RR и указать только две последние цифры года, то две первые цифры (столетие)
Oracle будет вычислять по следующим правилам:

Если указанный год находится в интервале от 00 до 49 и текущий год тоже попадает в этот интервал,
то столетие будет текущим, но если при этом текуший год будет находится в интервале от 50 до 99,
то столетие при этом будет увеличено на 1 (текущее столетие + 1).

select
to_char(to_date(’28-04-14′, ‘DD-MM-RR’), ‘DD-MM-YYYY’),
to_char(to_date(’28-04-77′, ‘DD-MM-RR‘), ‘DD-MM-YYYY’)
from dual;

Вобщем запомнить легко, если указанный год, больше текущего диапазона, значит столетие уменьшаем
и наоборот если указанный год, меньше текущего диапазона, значит столетие увеличиваем.

Интересно, а что будет если использовать формат RRRR, но при этом указать только две последние цифры года:

select
to_char(to_date(’28-04-14′, ‘DD-MM-RRRR‘), ‘DD-MM-YYYY’),
to_char(to_date(’28-04-77′, ‘DD-MM-RRRR‘), ‘DD-MM-YYYY’)
from dual;

В качестве столетия Oracle не подставил нули, вывод аналогичен формату RR.

Для выделения первой цифры столетия в формате года можно использовать запятую:

Допустимые форматы года:

2014 2014 2014 2014 2 014 014 014 14 14 14 4 4

А также год прописью:

Существует тип TIMESTAMP, который может хранить дробную часть секунд.
Необязательную точность представления секунд можно определить параметром FF[1..9]
Значение этого параметра по умолчанию равно 6 (справа от десятичной точки секунд можно поместить до 6 цифр)
При попытке поместить большее количество цифр в дробную часть секунд, значение дробной части будет округлено.

В отчетах statspack применяются следующие обозначения долей секунд:

SELECT TO_CHAR(SYSDATE, ‘YYYYMMDD HH24:MI.SS’) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘YYYY/MM/DD;HH24 «часов» MI «минут» SS «секунд»‘) FROM dual;

12-часовой формат исчисления времени предполагает разбиение 24 часов, составляющих сутки,
на два 12-часовых интервала, обозначаемых a.m. (лат. ante meridiem дословно — «до полудня»)
и p.m. (лат. post meridiem дословно — «после полудня»).

00:00 (полночь) 12:00 a.m.* (полночь)
12:00 (полдень) 12:00 p.m.* (полдень)

Проблемы в обозначениях полудня и полуночи:

Несмотря на наличие международного стандарта ISO 8601, 12 часов ночи и 12 часов дня обозначается в разных
странах по-разному. Это связано с тем, что в латинских словосочетаниях лат. ante meridiem и
лат. post meridiem слово meridiem означает буквально «середина дня» или «полдень»,
и нет однозначности между обозначением полудня как «12 a.m.» («12 ante meridiem»,
или «12 часов до середины дня») или как «12 p.m.» («12 post meridiem», или «12 часов после середины дня»).

С другой стороны, полночь также можно логично назвать «12 p.m.» (12 post meridiem,
12 часов после предыдущей середины дня) или «12 a.m.» (12 ante meridiem, 12 часов до следующей середины дня).

National Maritime Museum в Гринвиче рекомендует обозначать эти временные моменты как «12 дня» и «12 ночи».
То же советует и The American Heritage Dictionary of the English Language. Многие руководства по стилю,
принятые в США, предлагают «полночь» заменять на «11:59 p.m.», если мы хотим обозначить конец дня,
и «12:01 a.m.», если мы хотим обозначить начало следующего дня.

SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI.SS AM‘) FROM dual;

2014-10-18 14:53.58 PM

SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI.SS BC‘) FROM dual;

2014-10-18 15:00.25 Н.З.

SELECT TO_CHAR(SYSDATE, ‘DDTH‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘ddTH‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘mmTH‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘YYYYTH‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘yyyyTH-MMTH-DDTH HH24TH:miTH.SSTH BC’) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘DDSP‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘ddSP‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘mmTHSP‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘mmSP‘) FROM dual;

SELECT TO_CHAR(SYSDATE, ‘YYYYTHSP‘) FROM dual;

TWO THOUSAND FOURTEENTH

SELECT TO_CHAR(SYSDATE, ‘YYYYSP‘) FROM dual;

TWO THOUSAND FOURTEEN

Получить названия часовых поясов можно так:

select * from v$timezone_names;

Africa/Abidjan LMT
Africa/Abidjan GMT
Africa/Accra LMT
Africa/Accra GMT
Africa/Accra GHST
Africa/Addis_Ababa LMT
Africa/Addis_Ababa ADMT
Africa/Addis_Ababa EAT
Africa/Algiers LMT
Africa/Algiers PMT
Africa/Algiers WET
.

Посмотрим какое смещение относительно UTC установлено в нашей БД:

select dbtimezone from dual;

(меняется параметром time_zone в spfile.ora)

Часовой пояс сеанса можно определить так:

select sessiontimezone from dual;
Europe/Moscow

Его легко можно поменять на время сеанса:

alter session set time_zone = ‘PST’;
select sessiontimezone from dual;

Стандартное Тихоокеанское время PST отстает от UTC на восемь часов.
Восточное стандартное время EST отстает от UTC на пять часов.

Текущую дату для сеанса в локальном часовом поясе можно определить так:

select current_date from dual;

select to_char(current_date, ‘YYYY-MM-DD HH24:MI.SS’ ) from dual;

Для любого часового пояса можно найти величину смещения с помощью функции tz_offset().

select tz_offset(‘PST’) from dual;

select tz_offset(‘Europe/Moscow’) from dual;

Tип TIMESTAMP, в отличие от типа DATE, может хранить информацию о часовых поясах.

select to_char(SYSTIMESTAMP, ‘TZH:TZM‘) from dual;

select to_char(SYSTIMESTAMP, ‘TZR‘) from dual;

select to_char(SYSTIMESTAMP, ‘TZD‘) from dual;

select to_char(SYSTIMESTAMP, ‘HH:MI:SS.FFTZH:TZM‘) from dual;

select to_char(SYSTIMESTAMP, ‘YYYY-MM-DD HH:MI:SS TZH:TZM‘) from dual;

2014-10-18 10:52:19 +04:00

select to_char(SYSTIMESTAMP, ‘YYYY-MM-DD HH:MI:SS.FF AM TZH:TZM TZR TZD‘) from dual;

2014-10-18 10:52:31.802000 PM +04:00 +04:00

Чтобы конвертировать дату-время из одного часового пояса к другому,
можно воспользоваться функцией NEW_TIME().

Конвертация строки в тип дата-время.

Функцию TO_DATE(x [, формат])
можно использовать для конвертирования строки x в тип дата-время.

Если строка формата опущена, то дата должна быть представлена в формате по умолчанию:

DD-MON-YYYY или DD-MON-YY

(Вообще формат даты по умолчанию определяет параметр БД NLS_DATE_FORMAT)

alter session set NLS_DATE_LANGUAGE = ‘AMERICAN’ ;
alter session set NLS_DATE_FORMAT = ‘SYYYY-MM-DD’ ;
alter session set NLS_TIMESTAMP_FORMAT = ‘SYYYY-MM-DD HH24:MI:SS’ ;
alter session set NLS_TIMESTAMP_TZ_FORMAT = ‘SYYYY-MM-DD HH24:MI:SS TZH:TZM’ ;

alter session set NLS_DATE_LANGUAGE = ‘AMERICAN’;
alter session set NLS_DATE_FORMAT = ‘DD-MON-RRRR’;
select to_date(’28-APR-1971′), to_date(’28-APR-71′) from dual;

Можно и явно задать формат

Совместное использование to_date() и to_char()

Формат даты по умолчанию, можно использовать и при вставке строк в таблицу:

alter session set NLS_DATE_FORMAT = ‘DD-MON-YYYY‘;

insert into t1 ( id, bday ) values (1, ‘28-APR-1971‘ );

National language_support (До Oracle9i)
Globalisation support (Начиная с Oracle9i)

Кодировка устанавливается только в переменных окружения!

1) Язык вывода сообщений об ошибках
2) на каком языке выводить названия месяцев и дней недели
(Если явно не задан параметр NLS_DATE_LANGUAGE)

SELECT * FROM v$nls_valid_values
WHERE parameter = ‘LANGUAGE’
ORDER BY value

SELECT * FROM v$nls_valid_values
WHERE parameter = ‘TERRITORY’
ORDER BY value

SELECT * FROM v$nls_valid_values
WHERE parameter = ‘CHARACTERSET’
— Русский язык, Кириллица
AND (value LIKE ‘CL%’
OR
value LIKE ‘RU%’)
ORDER BY value

NLS_LANG = AMERICAN_CIS.CL8MSWIN1251
NLS_LANG = AMERICAN_AMERICA.RU8PC866
NLS_LANG = RUSSIAN_CIS.CL8ISO8859P1

Какие есть параметры NLS?

SELECT * FROM nls_session_parameters

Как можно устанавливать значения параметров NLS?

1. В системном реестре Windows

2. Установить переменные окружения
Для Windows (в bat-файле)

3. ALTER SESSION SET
NLS_DATE_LANGUAGE=RUSSIAN
NLS_DATE_FORMAT=’DD.MM.YYYY’;

SELECT TO_CHAR(SYSDATE, ‘Month day’)
FROM dual

Посмотреть nls-параметры сессии, базы данных и инстанса можно так:

select * from
(select ‘SESSION’ SCOPE,s.* from nls_session_parameters s
union
select ‘DATABASE’ SCOPE,d.* from nls_database_parameters d
union
select ‘INSTANCE’ SCOPE,i.* from nls_instance_parameters i
) a
pivot (LISTAGG(VALUE) WITHIN GROUP (ORDER BY SCOPE)
FOR SCOPE
in (‘SESSION’ as «SESSION»,’DATABASE’ as «DATABASE»,’INSTANCE’ as «INSTANCE»));

Функции для работы с типом data.

ADD_MONTHS(data, n)
Позволяет добавить к дате целое количество месяцев (или отнять, если n отрицательное)

В функцию ADD_MONTHS() можно передать и дату и время:

SELECT
TO_CHAR(ADD_MONTHS(TO_DATE(‘31.10.2001 21:08:50‘, ‘fxDD.MM.YYYY HH24:MI:SS’)
, 4) — Добавить 4 месяца
, ‘DD.MM.YYYY HH24:MI:SS’)
FROM DUAL;

SELECT
TO_CHAR(ADD_MONTHS(TO_DATE(‘28.02.2001 21:08:50‘, ‘fxDD.MM.YYYY HH24:MI:SS’)
, -4) — Отнять 4 месяца
, ‘DD.MM.YYYY HH24:MI:SS’)
FROM DUAL;

Источник

Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Базы данных

TO_DATE ФУНКЦИЯ

В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию TO_DATE с синтаксисом и примерами.

Описание

Oracle/PLSQL функция TO_DATE преобразует строку в дату.

Синтаксис

Синтаксис функции Oracle/PLSQL TO_DATE:

Параметры или аргументы

string1 это строка, которая будет преобразована в дату.

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

ПараметрПояснение
YYYY4-х значный год
YYY
YY
Y
Последние 3, 2 или 1 цифры(а) года.
IYY
IY
I
Последние 3, 2 или 1 цифры(а) года ISO.
IYYY4-значный год в соответствии со стандартом ISO
RRRRПринимает год с 2 цифрами и возвращает год с 4 цифрами.
Значение между 0-49 вернет 20xx год.
Значение между 50-99 вернет 19xx год.
QКвартал года (1, 2, 3, 4; JAN-MAR = 1).
MMМесяц (01-12; JAN = 01).
MONСокращенное название месяца.
MONTHНазвание месяца, дополненное пробелами длиной до 9 символов.
RMРимская цифра RM (I-XII; JAN = I).
WWНеделя года (1-53), где неделя 1 начинается в первый день года и продолжается до седьмого дня года.
WНеделя месяца (1-5), где 1-я неделя начинается в первый день месяца и заканчивается седьмым.
IWНеделя года (1-52 или 1-53) на основе стандарта ISO.
DДень недели (1-7).
DAYНазвание дня.
DDДень месяца (1-31).
DDDДень года (1-366).
DYСокращенное название дня.
JЮлианский день; количество дней с 1 января 4712 г. до н.э.
HHЧас дня (1-12).
HH12Час дня (1-12).
HH24Час дня (0-23).
MIМинута (0-59).
SSСекунда (0-59).
SSSSSСекунды после полуночи (0-86399).
FFДробные секунды. Используйте значение от 1 до 9 после FF, чтобы указать количество цифр в долях секунды. Например, ‘FF4’.
AM, A.M., PM, или P.M.Индикатор меридиана.
AD или A.DAD индикатор.
BC или B.C.BC индикатор.
TZDЛетнее время информация. Например, ‘PST’
TZHЧасовой пояс час.
TZMЧасовой пояс минуты.
TZRЧасовой пояс региона.

nls_language не является обязательным. NLS language используется для преобразования string1 к дате.

Применение

Функцию TO_DATE можно использовать в следующих версиях Oracle/PLSQL:

Пример

Рассмотрим несколько примеров функции TO_DATE, чтобы понять, как использовать функцию TO_DATE в Oracle/PLSQL.

Источник

Использование Функций с Датами

В примере на рисунке функция ADD_MONTHS добавляет один месяц к предоставленному значению даты “31-JAN-96” и возвращает «29-FEB-96».

oracle последний день года. Смотреть фото oracle последний день года. Смотреть картинку oracle последний день года. Картинка про oracle последний день года. Фото oracle последний день года

Функция распознает 1996 год как високосный год и, поэтому, возвращается последний день февраля. Если Вы изменяете входное значение даты на «31-JAN-95», функция возвращает «28-FEB-95».

Например, выведите на экран номер сотрудника, дату приема, число месяцев занятости, дату приема плюс 6 месяцев, первую пятницу после даты приема и последний день месяца приема для всех сотрудников, которые были приняты на работу менее 150 месяцев назад.

SELECT employee_id, hire_date, MONTHS_BETWEEN (SYSDATE, hire_date) TENURE, ADD_MONTHS (hire_date, 6) REVIEW, NEXT_DAY (hire_date, ‘FRIDAY’), LAST_DAY(hire_date)
FROM employees WHERE MONTHS_BETWEEN (SYSDATE, hire_date)

Использование Функций ROUND и TRUNC с Датами

Предположим, что SYSDATE = ’25-JUL-03′ :

oracle последний день года. Смотреть фото oracle последний день года. Смотреть картинку oracle последний день года. Картинка про oracle последний день года. Фото oracle последний день года

Функции ROUND и TRUNC могут использоваться для числовых значений и дат. Когда они используются с датами, эти функции округляют или усекают дату к указанной модели формата. Поэтому, Вы можете округлять даты к самому близкому году или месяцу. Если модель формата является месяцем, даты 1-15 результируются к первому дню текущего месяца. Даты 16-31 результируются к первому дню следующего месяца. Если модель формата является годом, месяцы 1-6 дают в результате 1 января текущего года. Месяцы 7-12 результируются к 1 января следующего года.

Пример:

Сравнение дат приема всех сотрудников, которые начали работать в 1997. Вывод на экран номера сотрудника, даты приема и начала месяца, используя функции TRUNC и ROUND.

Источник

Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Базы данных

ROUND ФУНКЦИЯ (ДЛЯ ДАТ)

В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию ROUND (для дат) с синтаксисом и примерами.

Описание

Oracle/PLSQL функция ROUND возвращает дату округленную до определенной единицы измерения.

Синтаксис

Синтаксис Oracle/PLSQL функции ROUND (для дат):

Параметры или аргументы

date дата для округления.

format единица измерения применяемая для округления. Если параметр format опущен, функция ROUND округляет до ближайшего дня.

Ниже приведены допустимые параметры format :

UnitДопустимый формат параметровПравило округления
YearSYYYY, YYYY, YEAR, SYEAR, YYY, YY, YОкругляет до 1 июля
ISO YearIYYY, IY, I
QuarterQОкругляет до 16 числа второго месяца квартала
MonthMONTH, MON, MM, RMОкругляет до 16 числа месяца
WeekWWТот же день недели, что и первый день года
IWIWТот же день недели, что и первый день года ISO
WWТот же день недели, что и первый день месяца
DayDDD, DD, J
Начальный день неделиDAY, DY, D
HourHH, HH12, HH24
MinuteMI

Функция ROUND (применительно к датам) возвращает значение date.

Применение

Функцию ROUND можно использовать в следующих версиях Oracle/PLSQL:

Пример

Рассмотрим несколько примеров функции ROUND и изучим, как использовать функцию ROUND в Oracle/PLSQL.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *