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

Как вычесть 30 дней с текущей даты с помощью SQL Server

Я не могу вычесть 30 дней с текущей даты, и я новичок в SQL Server.

Это данные в моей колонке

date 
------------------------------
Fri, 14 Nov 2014 23:03:35 GMT
Mon, 03 Nov 2014 15:18:00 GMT
Tue, 11 Nov 2014 01:24:47 GMT
Thu, 06 Nov 2014 19:13:47 GMT
Tue, 04 Nov 2014 12:37:06 GMT
Fri, 1 Nov 2014 00:33:00 GMT
Sat, 5 Nov 2014 01:06:00 GMT
Sun, 16 Nov 2014 06:37:12 GMT

Для создания вышеуказанного столбца я использовал varchar(50), и теперь моя проблема заключается в том, что я хочу отображать даты за последние 15-20 дней из столбца даты, может ли кто-нибудь помочь с этой проблемой? update [как я могу отображать последние 7 дней в порядке

4b9b3361

Ответ 1

Вы можете преобразовать его в datetime, а затем использовать DATEADD(DAY, -30, date).

Смотрите здесь.

изменить

Я подозреваю, что многие люди находят этот вопрос, потому что хотят вычесть из текущей даты (как и название вопроса, но не то, что ОП предназначено). Комментарий мюнюля ниже отвечает на этот вопрос более конкретно. Поскольку комментарии считаются эфирными (могут быть удалены в любой заданной точке), я повторю его здесь:

DATEADD(DAY, -30, GETDATE())

Ответ 2

ПОПРОБУЙТЕ ЭТО:

Передайте значение VARCHAR в DATETIME и добавьте -30 для вычитания. Кроме того, в sql-сервере формат Пт, 14 ноября 2014 23:03:35 GMT не был преобразован в DATETIME. Попробуйте подстроку:

SELECT DATEADD(dd, -30, 
       CAST(SUBSTRING ('Fri, 14 Nov 2014 23:03:35 GMT', 6, 21) 
       AS DATETIME))

Ответ 3

Попробуйте следующее:

SELECT      GETDATE(), 'Today'
UNION ALL
SELECT      DATEADD(DAY,  10, GETDATE()), '10 Days Later'
UNION ALL
SELECT      DATEADD(DAY, –10, GETDATE()), '10 Days Earlier'
UNION ALL
SELECT      DATEADD(MONTH,  1, GETDATE()), 'Next Month'
UNION ALL
SELECT      DATEADD(MONTH, –1, GETDATE()), 'Previous Month'
UNION ALL
SELECT      DATEADD(YEAR,  1, GETDATE()), 'Next Year'
UNION ALL
SELECT      DATEADD(YEAR, –1, GETDATE()), 'Previous Year'

Набор результатов:

———————– —————
2011-05-20 21:11:42.390 Today
2011-05-30 21:11:42.390 10 Days Later
2011-05-10 21:11:42.390 10 Days Earlier
2011-06-20 21:11:42.390 Next Month
2011-04-20 21:11:42.390 Previous Month
2012-05-20 21:11:42.390 Next Year
2010-05-20 21:11:42.390 Previous Year

Ответ 4

SELECT DATEADD(day,-30,date) AS before30d 
FROM...

Но настоятельно рекомендуется указывать дату в столбце datetime, а не varchar.