SQL datetime нужно читать 00: 00: 00.000 - PullRequest
6 голосов
/ 29 марта 2012

У меня есть следующий кусок SQL:

select DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))

, который выглядит как этот формат:

2012-02-29 23:59:59.000

Мне нужен точный кусок кода с той же датой, однако временная часть должна выглядеть как 00: 00: 00.000

Изменить * Я должен был прояснить это: мне нужно иметь последний день предыдущего месяца в любое время (со временем в формате 00: 00: 00.000 курса)

Ответы [ 5 ]

5 голосов
/ 29 марта 2012
select dateadd(d,datediff(d,0,dateadd(s,-1,dateadd(m,datediff(m,0,getdate()),0))),0)
3 голосов
/ 29 марта 2012

Это даст вам последнюю секунду предыдущего месяца

select dateadd(s,-1,dateadd(month,datediff(month,0,GETDATE()),0));

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

select dateadd(day,-1,dateadd(month,datediff(month,0,GETDATE()),0));

Подробнеекак это сделать:

select dateadd(day,datediff(day,0,@datetime),0);

или

select dateadd(day,datediff(day,0,GETDATE()),0);

На английском языке: укажите количество дней между этой датой и 0 и добавьте эти дни к 0.

Это работает с любым параметром для datediff.Так что

select dateadd(month,datediff(month,0,GETDATE()),0);

«удалит» всю информацию за день в дополнение к информации о времени.

3 голосов
/ 29 марта 2012
SELECT DATEADD(MONTH, -1, DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())))
2 голосов
/ 29 марта 2012

Альтернативный метод удаления части времени состоит в том, чтобы привести ее к плавающей точке, применить функцию Floor и привести к дате / времени.

select Cast(Floor(Cast(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) as float)) as datetime)
0 голосов
/ 29 марта 2012
SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))

В SQL Server 2012 вы можете использовать eomonth.

SELECT EOMONTH(DATEADD(MONTH, -1, GETDATE()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...