Подтвердить что ты не робот

Получите только дату DateTime в mssql

Возможный дубликат:
Получить только дату из группировки в столбце DateTime в SQL Server

Как я могу получить только часть Date DateTime? Я ищу что-то вроде функции year(), но для всей даты.

4b9b3361

Ответ 1

Решение, которое вы хотите, это предложение, предлагаемое здесь:

fooobar.com/questions/230541/...

В основном вы делаете это:

cast(floor(cast(@dateVariable as float)) as datetime)

В ссылке есть определение функции, которое позволит вам консолидировать функциональность и вызвать ее в любом месте (вместо того, чтобы запомнить ее), если хотите.

Ответ 2

Это также может помочь:

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM)
                                        -- Oct  2 2008 11:01AM
SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2008                  
SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           
SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy
SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy
SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy
SELECT convert(varchar, getdate(), 106) -- dd mon yyyy
SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy
SELECT convert(varchar, getdate(), 108) --  hh:mm:ss
SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)
                                        -- Oct  2 2008 11:02:44:013AM   
SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy
SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd
SELECT convert(varchar, getdate(), 112) -- yyyymmdd
SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm
                                        --  02 Oct 2008 11:02:07:577     
SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)
SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) --  yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                                        --  2008-10-02T10:52:47.513
-- SQL create different date styles with t-sql string functions
SELECT replace(convert(varchar, getdate(), 111), '/', ' ') -- yyyy mm dd
SELECT convert(varchar(7), getdate(), 126)                 -- yyyy-mm
SELECT right(convert(varchar, getdate(), 106), 8)          -- mon yyyy

Источник

Ответ 3

Еще один отличный способ:

DATEADD(dd, 0, DATEDIFF(dd, 0, [YourDate]))

Который получает количество дней от Дня 0 до YourDate и добавляет его к DAY 0, чтобы снова установить базовый уровень. Этот метод (или "производные" здесь) может использоваться для кучи других манипуляций с датами.

Изменить - другие расчеты даты:

Первый день месяца:

DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)

Первый день года:

DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)

Первый день квартала:

DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0)

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

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0))

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

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate()) + 1, 0))

Последний день текущего года:

DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()) + 1, 0))

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

DATEADD(wk, DATEDIFF(wk, 0, DATEADD(dd, 6 - DATEPART(day, getdate()), getdate())), 0)        

Изменить: Правда, Joe, он не добавляет его к DAY 0, он добавляет 0 (дней) к числу дней, которые в основном просто преобразуют его обратно в datetime.

Ответ 4

Мы можем использовать этот метод:

CONVERT(VARCHAR(10), GETDATE(), 120)

Последний параметр изменяет формат только для получения времени или даты в определенных форматах.

Ответ 5

Это может быть не так гладко, как однострочный, но я использую его для обработки даты в основном для отчетов:

DECLARE @Date datetime
SET @Date = GETDATE()

-- Set all time components to zero
SET @Date = DATEADD(ms, -DATEPART(ms, @Date), @Date) -- milliseconds = 0
SET @Date = DATEADD(ss, -DATEPART(ss, @Date), @Date) -- seconds = 0
SET @Date = DATEADD(mi, -DATEPART(mi, @Date), @Date) -- minutes = 0
SET @Date = DATEADD(hh, -DATEPART(hh, @Date), @Date) -- hours = 0

-- Extra manipulation for month and year
SET @Date = DATEADD(dd, -DATEPART(dd, @Date) + 1, @Date) -- day = 1
SET @Date = DATEADD(mm, -DATEPART(mm, @Date) + 1, @Date) -- month = 1

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