Самый простой способ создать дату, которая является первым днем ​​месяца, учитывая другую дату - PullRequest
9 голосов
/ 23 сентября 2008

В SQL Server, какой самый простой / чистый способ сделать дату и время, представляющее первое число месяца, основанным на другой дате и времени? например, у меня есть переменная или столбец с 3 марта 2005 г. 14:23 и я хочу получить 1 марта 2005 г. 00:00 (как datetime, а не как varchar)

Ответы [ 4 ]

25 голосов
/ 23 сентября 2008
Select DateAdd(Month, DateDiff(Month, 0, GetDate()), 0)

Чтобы запустить это для столбца, замените GetDate () на имя вашего столбца.

Хитрость в этом коде заключается в DateDiff. DateDiff возвращает целое число. Второй параметр (0) представляет дату 0 в SQL Server, то есть 1 января 1900 года. Таким образом, датировка вычисляет целое число месяцев с 1 января 1900 года, а затем добавляет это количество месяцев к 1 января 1900 года. Чистым эффектом является удаление дневной (и временной) части значения datetime.

7 голосов
/ 23 сентября 2008
SELECT DATEADD(mm, DATEDIFF(mm, 0, @date), 0)
2 голосов
/ 23 сентября 2008

Как-то так будет работать ....

UPDATE YOUR_TABLE
SET NewColumn = DATEADD(day, (DATEPART(day, OldColumn) -1)*-1, OldColumn)
0 голосов
/ 05 января 2015

Просто используйте

DATEADD(DAY, 1-DAY(@date), @date)
...