2015-02-10 5 views
2

Дорогие профессионалы,SQL SELECT Первый день и последний день месяца.

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

declare @FirstDOM datetime, @LastDOM datetime 

set @FirstDOM = (select dateadd(dd,-(day(getdate())-1),getdate())) 
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 

Поскольку это февраль 2015 года, я хотел бы получить результаты:

@FirstDOM = 2015-02-01 00:00:00.000 
@LastDOM = 2015-02-28 23:59:59.000 

@LastDOM правильно, но я не получаю нули для временного штампа части @FirstDOM, Я получаю правильную дату, но время, когда я запускаю скрипт. Скажем, это 8:50 утра, я получаю:

2015-02-01 08:50:49.160 

Каков наилучший способ исправить эту маленькую snafu?

С уважением,

Ник

+1

Поскольку getdate() - это дата, то ваш запрос также вернет дату и время. Одним из способов было бы преобразовать ваш результат на сегодняшний день, затем в varchar и добавить время вручную, или вы можете получить то же самое с datepart & dateadd. – glaeran

+2

FWIW, '23: 59: 59.000 'не последний раз за месяц. Таким образом, вы можете пропустить некоторые данные. –

+0

http://stackoverflow.com/questions/113045/how-to-return-the-date-part-only-from-a-sql-server-datetime-datatype –

ответ

4

Преобразовать @FirstDOM к DATE, как показано ниже:

declare @FirstDOM datetime, @LastDOM datetime 

set @FirstDOM = (select CONVERT(DATE,dateadd(dd,-(day(getdate())-1),getdate()))) 
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 
SELECT @FirstDOM,@LastDOM 

Я надеюсь, что это поможет!

Спасибо,

Swapnil

+0

Это вернет только дату, и автор хочет ее в datetime. – glaeran

+0

Автор хочет отметку времени для FirstDOM как «00:00:00». Преобразование его в DATE приведет к тому же. – Swapnil

4
declare @FirstDOM datetime, @LastDOM datetime 

set @FirstDOM = (select dateadd(d,-1,dateadd(mm,datediff(m,0,getdate()),1))) 
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 
Print @FirstDOM 
Print @LastDOM 
1

в дополнение к другим ответам, так как SQL-Server 2012, Microsoft предлагает

EOMONTH (start_date [, month_to_add ]) 

Подробнее о msdn

-

темы: Я наткнулся на этот вопрос в поисках первого дня месяца в SQL, на который были отвечены другие

Смежные вопросы