Ответ 1
Используйте DATEADD в своем предложении WHERE:
...
WHERE date < DATEADD(day, -30, GETDATE())
Вы также можете использовать аббревиатуру d
или dd
вместо day
.
Я хочу найти инструкцию SQL, которая при выполнении удаляет поля, которые старше, чем 30 дней.
В моих "событиях" таблицы есть поле "дата", которое содержит дату и время, в которое она была вставлена в базу данных.
Сейчас меня нет дома, поэтому я не могу это проверить. это хорошо?
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
Используйте DATEADD в своем предложении WHERE:
...
WHERE date < DATEADD(day, -30, GETDATE())
Вы также можете использовать аббревиатуру d
или dd
вместо day
.
Хотя DATEADD
, вероятно, самый прозрачный способ сделать это, стоит отметить
что просто getdate()-30
также будет достаточно.
Кроме того, вы ищете 30 дней, т.е. включая часы, минуты, секунды и т.д.? Или 30 дней с полуночи сегодня (например, 12/06/2010 00: 00: 00.000). В этом случае вы можете подумать:
SELECT *
FROM Results
WHERE convert(varchar(8), [Date], 112) >= convert(varchar(8), getdate(), 112)
Вы также можете установить между двумя датами:
Delete From tblAudit
WHERE Date_dat < DATEADD(day, -360, GETDATE())
GO
Delete From tblAudit
WHERE Date_dat > DATEADD(day, -60, GETDATE())
GO
Вместо того, чтобы преобразовать в varchar, чтобы получить только день (convert (varchar (8), [Date], 112)), я предпочитаю хранить его в поле datetime и делать его только датой (без времени).
SELECT * FROM Results
WHERE CONVERT(date, [Date]) >= CONVERT(date, GETDATE())
Вы также можете использовать
SELECT * from Results WHERE date < NOW() - INTERVAL 30 DAY;