Oracle sql получить первый день месяца

Обновлено: 02.07.2024

Функция SYSDATE
Функция SYSDATE возвращает текущую дату и время по часам сервера.

Пример:
SELECT SYSDATE FROM dual;

Функция ADD_MONTHS (d, x)
Возвращает дату, полученную в результате прибавления к дате d одного или нескольких месяцев. Количество месяцев задается параметров x, причем x может быть отрицательным — в этом случае указанное количество месяцев вычитается из заданной даты.

Пример:
SELECT SYSDATE d, ADD_MONTHS ( SYSDATE , 5) d1, ADD_MONTHS ( SYSDATE , -5) d2 FROM dual;

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

Пример:
SELECT SYSDATE d, LAST_DAY ( SYSDATE ) d1 FROM dual;

Функция MONTHS_BETWEEN (d1, d2)
Функция MONTHS_BETWEEN возвращает количество месяцев между двумя датами d1 и d2 с учетом знака как d1-d2, возвращаемое число является дробным.

SELECT MONTHS_BETWEEN ( '2.09.2011' , '2.05.2010' ) d1, MONTHS_BETWEEN ( '12.09.2017' , '2.05.2012' ) d2, MONTHS_BETWEEN ( '2.05.2018' , '12.09.2015' ) d3
FROM dual;

Функция TRUNC (d[,mask])
Производит усечение указанной даты в соответствии с маской. Если маска не указана, то усечение производится до даты (время отбрасывается).

Пример:
SELECT SYSDATE d1, TRUNC ( SYSDATE ) d2 FROM dual;

Усечение даты до часов, дней, месяца и года. Форматная маска по умолчанию равна «DD»

SELECT SYSDATE d1,
TRUNC ( SYSDATE , 'HH24' ) d2,
TRUNC ( SYSDATE , 'DD' ) d3,
TRUNC ( SYSDATE , 'MM' ) d4,
TRUNC ( SYSDATE , 'YYYY' ) d5
FROM dual;

Функция ROUND (d[,mask])
Функция ROUND аналогична TRUNC , но вместо усечения она производит округление. Форматная маска по умолчанию равна 'DD' .

Пример:
SELECT SYSDATE d1,
ROUND ( SYSDATE ) d2,
ROUND ( SYSDATE , 'HH24' ) d3,
ROUND ( SYSDATE , 'DD' ) d4,
ROUND ( SYSDATE , 'MM' ) d5,
ROUND ( SYSDATE , 'YYYY' ) d6
FROM dual;

Форматные маски для функций TRUNC и ROUND :
СС - Первый день столетия
YEAR, YYYY, YY, Y - Первый день года
Q - Первый день квартала
MONTH, MON, MM - Первый день месяца
WW - Тот же день недели, что и первый день текущего года
W - Тот же день недели, что и первый день текущего месяца
DDD, DD - День
DAY, DY, D - Первый день недели
HH, HH12, HH24 - Час
MI - Минута

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

Пример:
SELECT TO_DATE ( '12.09.2006' ) d FROM dual;

Функция TO_CHAR (d[,mask])
Преобразует дату d в символьную строку в соответствии с заданной маской. В случае указания недопустимой маски возникает исключительная ситуация «ORA-01821: формат даты не распознан».

Пример:
SELECT SYSDATE d1, TO_CHAR ( SYSDATE , 'DD.MM.YY HH24:MI' ) d2 FROM dual;

Форматные маски функции TO_CHAR :

СС - Столетие.
SСС - Столетие, перед датами до нашей эры ставится знак «минус».
YYYY - Год.
SYYYY - Год, перед датами до нашей эры ставится знак «минус».
YYY, YY, Y - Год, последние 3,2 или 1 цифры года.
SYEAR, YEAR - Год, записанный прописью c учетом текущего национального языка.
Q - Номер квартала.
MM - Месяц.
RM - Номер месяца, записанный с имитацией римских цифр при помощи символов X и I.
MONTH - Название месяца прописью.
MON - Название месяца прописью в сокращенном до трех символов виде.
WW - Неделя года.
W - Неделя месяца.
DDD - День года.
DD - День месяца.
D - День недели.
DAY - День недели прописью, при необходимости дополняется до девяти символов пробелами.
DY - День недели прописью, сокращенный до трех символов.
J - Дата юлианского календаря. Является числом дней от 1.01.4712 до нашей эры.
HH24 - Час дня по 24-часовой шкале (0-23).
HH12, HH - Час дня по 12-часовой шкале (1-12).
AM, PM - Вывод признака «до полудня» — AM и «после полудня» — PM. Указание AM и PM в форматной маске равнозначно.
MI - Минуты (0-59).
SS - Секунды (0-59).
SSSSS - Количество секунд после полуночи.
-/. ; - Знаки пунктуации. Они выводятся в соответствующие места отформатированной даты.
SP - Форматный суффикс. Его добавление к элементу форматной маски, возвращающему число, приводит к форматированию этого числа прописью.

Требование-дата ввода должна быть произведена в первый день месяца. Условия таковы:

  1. Если введенная дата находится между 16-ноябрем и 30-ноябрем, то первый день будет be 16-ноябрем.
  2. если введенная дата находится между 1-ноябрем и 15-ноябрем, то первый день будет be 01-ноябрем.
  3. для всех остальных месяцев он должен возвращать 01-е число соответствующего месяца.

2 ответа

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

Используя cmd batch file, могу ли я получить первый день месяца и запустить действие? Например, каждый первый день месяца выключайте компьютер. Заранее спасибо!

Опираясь на решение Тима Бигелейзена, упростите его и избегайте конверсий date-to-text-to-date. Обратите внимание на использование TRUNC для получения первой даты периода.

Для этого я использовал длинное выражение CASE , содержащее логику для трех случаев, о которых вы упомянули в своем вопросе.

Похожие вопросы:

В SQL Server Reporting Services; как я могу рассчитать первый и последний день предыдущего месяца? Я знаю, что могу использовать приведенное ниже выражение, чтобы получить последний день текущего.

Я могу найти первый день текущего и следующего месяца, используя SQL Server 2008 Где мой код: declare @date_begin date= DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0) declare @date_end date=.

Если у меня есть название месяца, как я могу иметь первый и последний день этого месяца в SQL? У меня есть этот запрос, чтобы вернуть имена месяцев: DECLARE @StartDate DATETIME, @EndDate DATETIME;.

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

Используя cmd batch file, могу ли я получить первый день месяца и запустить действие? Например, каждый первый день месяца выключайте компьютер. Заранее спасибо!

Я пытаюсь преобразовать это утверждение Oracle в SQL Server: trunc(e.evt_created) - (to_number(to_char(e.evt_created, 'DD')) - 1)As Month Raised Это первый день месяца, так что если e.evt_created.

Мне нужно создать расписание для выполнения заданий в oracle. Он будет работать в первый рабочий день месяца, но без учета праздников. Когда первый рабочий день месяца является праздничным, то.

SQL: как вы получаете первый день месяца? Привет, Мне нужно получить первый день каждого месяца из tbl.date из столбца start_date. 11/1/2017 12/1/2017 1/1/2018 2/1/2018 ETC. Спасибо

WHERE to_date(smz_loanservicing.as_of_date) = last_day(add_months(current_date, -1)) Вышеприведенные данные будут предоставлены только в том случае, если loanservicing.as_of_date произойдет в самый.

Как найти первый четверг этого месяца с помощью oracle? select trunc(sysdate, 'MM')firstday from dual; выше идет первый день этого месяца

Функции даты и времени в Oracle PL/SQL

Oracle реализует набор функций для работы со значениями типа даты/времени. Мы не будем подробно рассматривать все функции, но сводка в табл. 1 познакомит Вас с доступными возможностями. Если какие-то функции вас заинтересуют, обращайтесь за подробным описанием к справочнику Oracle SQL Reference.

Избегайте использования традиционных функций Oracle, обрабатывающих значения типа DATE , при работе с новыми типами данных TIMESTAMP . Вместо них следует по возможности использовать новые функции для типов INTERVAL . А DATE -функции должны использоваться только для обработки значений типа DATE .

Многие из приведенных в табл. 1 функций (в том числе ADD_MONTHS ) получают значения типа DATE . При использовании таких функций с новыми типами данных TIMESTAMP могут возникнуть проблемы. Хотя любой из этих функций можно передать значение типа TIMESTAMP , Oracle неявно преобразует его к типу DATE , и только тогда функция выполнит свою задачу, например:

В этом примере переменная ts содержит значение типа TIMESTAMP WITH TIME ZONE . Это значение неявно преобразуется в DATE при передаче LAST_DAY . Поскольку в типе DATE не сохраняются ни дробные части секунд, ни смещение часового пояса, эти части значения ts попросту отбрасываются. Результат LAST_DAY снова присваивается ts , что приводит к выполнению второго неявного преобразования — на этот раз DATE преобразуется в TIMESTAMP WITH TIME ZONE . Второе преобразование получает часовой пояс сеанса, поэтому в смещении часового пояса в итоговом значении мы видим ?05:00.

Очень важно понимать эти преобразования. и избегать их. Несомненно, вы представляете, какие коварные ошибки могут появиться в программе из-за неосторожного использования функций DATE со значениями TIMESTAMP . Честно говоря, я не представляю, почему в Oracle встроенные функции DATE не были перегружены для нормальной работы с TIMESTAMP . Будьте осторожны!

Мне просто нужно выбрать первый день месяца для данной переменной datetime.

Я знаю, что это довольно легко сделать, используя такой код:

Но это не очень элегантно и, вероятно, не очень быстро.

Есть лучший способ сделать это? Я использую SQL Server 2008.

ОТВЕТЫ

Ответ 1

Ответ 2

В дополнение ко всему вышеприведенному ответу, способ, основанный на функции, введенной в sql 2012

Ответ 3

Начиная с SQL Server 2012:

Ответ 4

Кастинг строки (т.е. "5/1/2009" ) в datetime, безусловно, более разборчив, но мы нашли код в то время назад, который вернул бы первый месяц.

Ответ 5

Ответ 6

Это, вероятно, довольно быстро. Почему бы не создать его как функцию sql.

Ответ 7

Это тоже работает:

Ответ 8

Ответ 9

Пожалуйста, используйте этот

Для сервера 2012

Ответ 10

Ответ 11

Будущие googlers, на MySQL, попробуйте это:

Ответ 12

Если вы смотрите на это сегодня и используя SQL-сервер 2012 или новее, у вас есть функция EOMONTH, которая упрощает:

Вы можете изменить GETDATE() с любой переменной даты, которую вы хотите.

Ответ 13

Здесь мы можем использовать ниже запрос к первой дате месяца и последней дате месяца.

Ответ 14

Если вы используете SQL Server 2012 или выше,

Ответ 15

-2 вы получите первый день в прошлом месяце. т.е. getdate() - 10/15/18. Ваши результаты будут 9/1/18. Перейдите на -1, и ваши результаты будут 10/1/18. 0 будет началом следующего месяца, 11/1/2018.. и т.д. И т.д.

Ответ 16

Попробуйте выполнить следующий запрос:

SELECT DATE_ADD(DATE_ADD(LAST_DAY(CURRENT_DATE-INTERVAL 1 DAY),INTERVAL 1 DAY),INTERVAL -1 MONTH)

Ответ 17

Первый и последний день текущего месяца:

Ответ 18

выберите CONVERT (дата, DATEADD (dd, - (DATEPART (dd, getdate()) - 1), getdate()), 120)

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

Ответ 19

Если вы не хотите времени, затем конвертируете его в DATE или хотите сделать время до 0:00:00, конвертируйте в DATE, а затем обратно в DATETIME.

Измените GETDATE() на нужную дату.

Ответ 20

Я использовал GETDATE() как дату для работы, вы можете заменить ее на нужную вам дату.

Вот как это работает: сначала мы отформатируем дату в формате YYYYMMDD. чтобы убрать только 6 левых символов, чтобы сохранить только часть YYYYMM, а затем добавить "01" в качестве месяца - и вуаля! у вас есть первый день текущего месяца.

Кстати, производительность на этом отлично!

Ответ 21

Я лично рекомендовал, чтобы sql был ниже, потому что, когда я пытаюсь использовать функцию даты в условии условия, это очень замедляет мою скорость запроса.

в любом случае не стесняйтесь попробовать это.

Ответ 22

Не конкурировать с любым из великих умов здесь, но простое предложение немного отличается от принятого ответа выше.

Ответ 23

Мне нравится использовать FORMAT , вы даже можете указать время

Ответ 24

В SQL Server 2012

Ответ 25

Этот запрос должен очень хорошо работать на MySQL:

Ответ 26

Для тех, кто все еще ищет ответ, это работает как шарм и устраняет любые даты. Временная метка является необязательной, если она требует указания, но также работает без нее.

Читайте также: