如何使用SQL Server从当前日期中减去30天

如何使用SQL Server从当前日期中减去30天,sql,sql-server,sql-server-2008,sql-server-2012,Sql,Sql Server,Sql Server 2008,Sql Server 2012,我无法从当前日期减去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:0

我无法从当前日期减去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天的日期,有人能帮我解决这个问题吗?
更新[如何按顺序显示最近7天的日期

您可以将其转换为
datetime
,然后使用
DATEADD(DAY,-30,date)

编辑

我怀疑很多人发现这个问题是因为他们想从当前日期中删减(这是问题的标题,但不是OP的意图)。下面munyul的评论更具体地回答了这个问题。由于评论被认为是空灵的(在任何给定点都可能被删除),我将在这里重复:

DATEADD(DAY, -30, GETDATE())
但强烈建议在datetime列中保留日期,而不是varchar。

尝试以下方法:

将您的VARCHAR值强制转换为DATETIME,并添加-30进行减法运算。此外,在sql server中,格式Fri,2014年11月14日23:03:35 GMT未转换为DATETIME。请尝试为其使用子字符串:

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

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

-您应该始终使用最合适的数据类型—毕竟,这就是它们的用途!如果要存储日期,请使用
DATE
DATETIME2(n)
-但最肯定的不是
varchar
列!嘿,它对信息非常有用,我正在更新我的专栏,简单而精彩!对于任何想知道的人,你可以将方法中的日期与月份进行交换,以对一个月的差异执行相同的操作。我可以想象任何有效的日期时间值都会起作用。
———————– —————
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