Как выбрать первый день месяца в SQL? - PullRequest
264 голосов
/ 05 октября 2009

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

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

select CAST(CAST(YEAR(@mydate) AS VARCHAR(4)) 
+ '/' + CAST(MONTH(@mydate) AS VARCHAR(2)) + '/01' AS DATETIME)

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

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

Ответы [ 25 ]

0 голосов
/ 13 ноября 2015

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

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

select CONCAT(DATEPART(YYYY,@mydate),'-',DATEPART(MM,@mydate),'-01')
0 голосов
/ 02 сентября 2015

Я использовал GETDATE () в качестве даты для работы, вы можете заменить ее на нужную вам дату.
Вот как это работает: сначала мы форматируем дату в формате ГГГГММДД ... усечением, чтобы сохранить только 6 крайних левых символов, чтобы оставить только часть ГГГГММ, а затем добавляем '01' в качестве месяца - и вуаля! у вас первый день текущего месяца.

SELECT CAST(CONVERT(VARCHAR(6),GETDATE(),112) +'01' AS DATETIME) AS StartOfMonth

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

0 голосов
/ 06 апреля 2015
SELECT DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())

............................................... ......................

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

SELECT CONVERT (DATETIME,  
CONVERT (DATE, DATEADD (DAY, -1 * (DAY(GETDATE()) - 1),
GETDATE())))

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

0 голосов
/ 15 августа 2014

Это кажется глупо простым, но у меня работает:

  select DATE_FORMAT(NOW(), '%Y-%m-1')
0 голосов
/ 12 марта 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...