Oracle sql получить первый день месяца
Функция 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 - Форматный суффикс. Его добавление к элементу форматной маски, возвращающему число, приводит к форматированию этого числа прописью.
Требование-дата ввода должна быть произведена в первый день месяца. Условия таковы:
- Если введенная дата находится между 16-ноябрем и 30-ноябрем, то первый день будет be 16-ноябрем.
- если введенная дата находится между 1-ноябрем и 15-ноябрем, то первый день будет be 01-ноябрем.
- для всех остальных месяцев он должен возвращать 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 реализует набор функций для работы со значениями типа даты/времени. Мы не будем подробно рассматривать все функции, но сводка в табл. 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
Для тех, кто все еще ищет ответ, это работает как шарм и устраняет любые даты. Временная метка является необязательной, если она требует указания, но также работает без нее.
Читайте также: