Как выбрать первый день месяца в 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 ]

1 голос
/ 22 февраля 2019

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

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

1 голос
/ 30 октября 2018
DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(Getdate(),-2))

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

или

DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(@mydate,-1))
1 голос
/ 06 сентября 2017

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

SELECT DATEADD(MONTH, -1, DATEADD(DAY, 1, EOMONTH(GETDATE())))
1 голос
/ 15 июня 2017

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

SELECT DATEADD(day, 1, EOMONTH(DATEADD(month, -1, GETDATE()))) as firstdateofmonth

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

1 голос
/ 20 августа 2017

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

SELECT DATEADD(DAY,1,EOMONTH(Getdate(),-1)) as 'FD',Cast(Getdate()-1 as Date)
as 'LD'
1 голос
/ 05 декабря 2013

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

select date_sub(ref_date, interval day(ref_date)-1 day) as day1;
0 голосов
/ 15 апреля 2019

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

select dateadd(mm, -1,dateadd(dd, +1, eomonth(getdate()))) as FirstDay, 
eomonth(getdate()) as LastDay
0 голосов
/ 04 января 2019

В Sql Server 2012,

 select getdate()-DATEPART(day, getdate())+1

 select DATEADD(Month,1,getdate())-DATEPART(day, getdate())
0 голосов
/ 17 октября 2018

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

SELECT FORMAT(@myDate,'yyyy-MM-01 06:00') first_of_a_month
0 голосов
/ 10 августа 2016

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

select dateadd(day, -(datepart(day,@date)+1,@date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...