sql первый день месяца по дате
EOMONTH (Transact-SQL)
Эта функция возвращает последний день месяца, содержащего указанную дату, с необязательным смещением.

Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
start_date
Выражение даты, задающее дату, для которой необходимо возвратить последний день месяца.
month_to_add
Необязательное целочисленное выражение, задающее количество месяцев, добавляемых к параметру start_date.
Если аргумент month_to_add имеет значение, то EOMONTH добавляет указанное число месяцев к значению start_date и возвращает последний день месяца, соответствующего полученной дате. Если при таком сложении происходит выход за пределы допустимого диапазона дат, функция EOMONTH вызывает ошибку.
Тип возвращаемых данных
date
Remarks
Функция EOMONTH поддерживает удаленное взаимодействие с серверами SQL Server 2012 (11.x) и более поздних версий. Она не может быть удаленной для серверов с версией ниже SQL Server 2012 (11.x).
Примеры
A. EOMONTH с явным типом datetime
Б. EOMONTH со строковым параметром и неявным преобразованием
В. Функция EOMONTH с параметром month_to_add и без него
Значения в этих результирующих наборах отражают дату выполнения между 12/01/2011 и 12/31/2011 (включительно).
Как выбрать первый день месяца в SQL?
Мне просто нужно выбрать первый день месяца данной переменной datetime.
Я знаю, что это довольно легко сделать, используя такой код:
но это не очень элегантно, и, наверное, не очень быстро.
19 ответов
в дополнение ко всему вышеприведенному ответу, способ, основанный на функции, введенной в sql 2012
приведение строки (т. е. «5/1/2009») в datetime, безусловно, более разборчиво, но мы нашли код некоторое время назад, который вернет первое число месяца.
Это, вероятно, довольно быстро. Почему бы не создать его как функцию sql.
пожалуйста, используйте этот
Перед Сервером 2012
будущие гуглеры, на MySQL, попробуйте это:
Если вы смотрите на это сегодня и используете SQL server 2012 или новее, у вас есть функция EOMONTH, которая упрощает работу:
вы можете изменить GETDATE () с любой переменной даты, которую вы хотите.
здесь мы можем использовать ниже запрос к первой дате месяца и последней дате месяца.
при использовании SQL Server 2012 или выше;
эта функция предоставит вам дату дату начала месяца
Если вы не хотите время, а затем преобразовать его в дату или если вы хотите, чтобы время в 0:00: 00, преобразовать в дату, а затем обратно в DATETIME.
изменить GETDATE () на дату, которую вы хотите
кстати, производительность отличная!
Я лично рекомендовал, чтобы sql ниже, потому что, когда я пытаюсь использовать функцию date в предложении condition, это очень замедляет скорость моего запроса.
в любом случае, не стесняйтесь попробовать это.
не конкурировать с любым из великих умов здесь, но простое предложение немного отличается от принятого ответа выше.
Это кажется глупо простым, но работает для меня:
Типы данных и функции даты и времени (Transact-SQL)
В разделах этой статьи представлен обзор всех типов данных и функций даты и времени Transact-SQL.
Типы данных даты и времени
Типы данных даты и времени Transact-SQL перечислены в следующей таблице:
| Тип данных | Формат | Диапазон | Точность | Объем памяти (в байтах) | Определяемая пользователем точность в долях секунды | Смещение часового пояса |
|---|---|---|---|---|---|---|
| time | чч:мм:сс[.ннннннн] | От 00:00:00.0000000 до 23:59:59.9999999 | 100 наносекунд | от 3 до 5 | Да | Нет |
| date | ГГГГ-ММ-ДД | От 0001-01-01 до 31.12.99 | 1 день | 3 | Нет | Нет |
| smalldatetime | ГГГГ-ММ-ДД чч:мм:сс | От 01.01.1900 до 06.06.2079 | 1 минута | 4 | нет | Нет |
| datetime | ГГГГ-ММ-ДД чч:мм:сс[.ннн] | От 01.01.1753 до 31.12.9999 | 0,00333 секунды | 8 | Нет | Нет |
| datetime2 | ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] | От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 | 100 наносекунд | От 6 до 8 | Да | Нет |
| datetimeoffset | ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:мм | От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 (время в формате UTC) | 100 наносекунд | От 8 до 10 | Да | Да |
Тип данных Transact-SQL rowversion не относится к типам данных даты и времени. Тип данных timestamp является устаревшим синонимом rowversion.
Функции даты и времени
В следующих таблицах приводятся функции даты и времени Transact-SQL. Дополнительные сведения о детерминизме см. в статье Детерминированные и недетерминированные функции.
Функции, возвращающие значения системной даты и времени
Transact-SQL наследует все значения системной даты и времени от операционной системы компьютера, на котором работает экземпляр SQL Server.
Высокоточные функции системной даты и времени
SQL Server 2019 (15.x) получает значения даты и времени с помощью функции GetSystemTimeAsFileTime() Windows API. Точность зависит от физического оборудования и версии Windows, в которой запущен экземпляр SQL Server. Точность возвращаемых значений этого API-интерфейса задана равной 100 нс. Точность может быть определена с помощью метода GetSystemTimeAdjustment() API-интерфейса Windows.
DATEPART (Transact-SQL)
Эта функция возвращает целое число, представляющее указанную часть datepart заданного типа date.
Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).

Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
datepart
Определенная часть аргумента date, для которого функция DATEPART вернет значение типа integer. В приведенной ниже таблице перечислены все допустимые аргументы datepart.
DATEPART не принимает эквивалентные переменные, определяемые пользователем, для аргументов datepart.
| datepart | Сокращения |
|---|---|
| year | yy, yyyy |
| quarter | qq, q |
| month | mm, m |
| dayofyear | dy, y |
| day | dd, d |
| week | wk, ww |
| weekday | dw |
| hour | hh |
| minute | mi, n |
| second | ss, s |
| millisecond | ms |
| microsecond | mcs |
| nanosecond | ns |
| tzoffset | tz |
| iso_week | isowk, isoww |
date
Выражение, которое разрешается в один из следующих типов данных:
Для date DATEPART будет принимать столбец выражения, выражение, строковый литерал или определяемую пользователем переменную. Во избежание неоднозначности используйте четырехзначную запись года. Сведения о двузначном обозначении года см. в статье Настройка параметра конфигурации сервера two digit year cutoff.
Тип возвращаемых данных
Возвращаемое значение
Каждое выражение datepart и его краткие формы возвращают одно и то же значение.
Возвращаемое значение зависит от языка среды, задаваемого инструкцией SET LANGUAGE, и от параметра конфигурации сервера «язык по умолчанию» для имени входа. Если значение date является строковым литералом некоторого формата, то возвращаемое значение зависит от функции SET DATEFORMAT. Инструкция SET DATEFORMAT не изменяет возвращаемое значение, если дата представляется выражением столбца типа данных даты или времени.
.123456700
| datepart | Возвращаемое значение |
|---|---|
| year, yyyy, yy | 2007 г. |
| quarter, qq, q | 4 |
| month, mm, m | 10 |
| dayofyear, dy, y | 303 |
| day, dd, d | 30 |
| week, wk, ww | 44 |
| weekday, dw | 3 |
| hour, hh | 12 |
| minute, n | 15 |
| second, ss, s | 32 |
| millisecond, ms | 123 |
| microsecond, mcs | 123456 |
| nanosecond, ns | 123456700 |
| tzoffset, tz | 310 |
| iso_week, isowk, isoww | 44 |
Аргументы функции datepart, содержащие информацию о номере недели и дня
Для week (wk, ww) или weekday (dw) datepart возвращаемое значение DATEPART зависит от значения, заданного функцией SET DATEFIRST.
1 января любого года определяет начальное число для компонента даты week datepart. Пример:
DATEPART (wk, ‘Jan 1, xxx x’) = 1,
где xxxx — любой год.
В этой таблице представлены возвращаемые значения параметров week и weekday datepart для даты 21.04.2007 с каждым аргументом функции SET DATEFIRST. 1 января 2007 г. приходится на понедельник. 21 апреля 2007 г. приходится на субботу. Для региональных настроек «Английский (США)»
SET DATEFIRST 7 (воскресенье). После задания DATEFIRST используйте предлагаемую инструкцию SQL для табличных значений datepart:
SELECT DATEPART(week, ‘2007-04-21 ‘), DATEPART(weekday, ‘2007-04-21 ‘)
возвращаемое
Аргументы функции datepart, отображающие год, месяц и день даты
Значения, возвращаемые в результате выполнения инструкций DATEPART (year, date), DATEPART (month, date) и DATEPART (day, date), совпадают с результатами выполнения функций YEAR, MONTH и DAY, соответственно.
iso_week datepart
Стандарт ISO 8601 включает в себя систему отсчета дней и недель ISO. Каждая неделя приписывается тому году, в котором находится ее четверг. Например, первая неделя 2004 г. (2004W01) считается с понедельника 29 декабря 2003 г. по воскресенье 4 января 2004 г. Этот стиль нумерации обычно используется в странах и регионах Европы. В других странах он применяется редко.
Примечание. Наибольшее число недель в году может составлять 52 или 53.
Система отсчета недель в разных странах и регионах может не совпадать со стандартом ISO. В таблице ниже представлено шесть возможных вариантов.
