У меня есть представление SQL, которое содержит столбец с датами в формате «2012-06-21 19:44:50.543». Мне нужно ввести условие, чтобы показывать только строки с датами, начинающимися с начала предыдущего месяца. Эта процедура требует использования текущего (встроенного) времени. Также мне нужно, чтобы такой вид обновлялся автоматически каждый месяц. Как я могу это сделать?
1 ответ
Чтобы получить даты, начинающиеся с предыдущего месяца, на основе текущего системного времени, вы будете использовать DATEADD()
и GETDATE()
.
DATEADD
возвращает указанную дату с указанным интервалом чисел (целое число со знаком ), добавленным к указанной части даты этой даты.
DATEADD (datepart , number , date )
GETDATE
возвращает текущую системную метку базы данных в качестве значения даты и времени без смещения часового пояса базы данных. Это значение получено из операционной системы компьютера, на котором работает экземпляр SQL Server.
GETDATE ( )
Чтобы рассчитать даты, которые совпадают с начала прошлого месяца (помните, это пример и может потребоваться изменение с вашим кодом):
SELECT [col1], [col2], [dt] FROM [table]
WHERE [dt] >= convert(varchar,DATEADD(MONTH,-1,
DATEADD(MONTH,DATEDIFF(MONTH,0,
getdate()),0)),101)
Пожалуйста, прочитайте также о DATEDIFF()
и CONVERT()
чтобы понять, как работает форматирование, представленное 101
. Вы можете предпочесть 121
вместо этого.
(Дополнительный источник: статья Терри Аподаки «Даты SQL - первый, текущий, последний день месяца»), которая переместилась со старого адреса на http://v1.terryapodaca.com/2008/01/28/sql-dates-first. -current-last-day-of-month(или вы можете прочитать архивную копию на Wayback Machine).)