48

我有疑问:

SELECT name
FROM (
SELECT name FROM 
Hist_answer
WHERE id_city='34324' AND datetime >= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)
UNION ALL
SELECT name FROM 
Hist_internet
WHERE id_city='34324' AND datetime >= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)
) x
GROUP BY name ORDER BY name

但是DATE_SUB是一个 MySQL 函数,我需要 MsSQL 2008 的函数

请告诉我如何使用 MsSQL 2008 选择 30 天的数据?

PS: 日期时间的数据类型是smalldatetime

4

4 回答 4

65

您应该使用DATEADD的是 Sql server,所以如果尝试这个简单的选择,您将看到效果

Select DATEADD(Month, -1, getdate())

结果

2013-04-20 14:08:07.177

在你的情况下试试这个查询

SELECT name
FROM (
SELECT name FROM 
Hist_answer
WHERE id_city='34324' AND datetime >= DATEADD(month,-1,GETDATE())
UNION ALL
SELECT name FROM 
Hist_internet
WHERE id_city='34324' AND datetime >= DATEADD(month,-1,GETDATE())
) x
GROUP BY name ORDER BY name
于 2013-05-20T09:10:08.283 回答
23

试试这个:使用这个你可以选择最近 30 天的日期,

SELECT DATEADD(DAY,-30,GETDATE())
于 2013-05-20T09:05:39.253 回答
13

对于那些无法让 DATEADD 工作的人,请尝试以下方法:( NOW( ) - INTERVAL 1 MONTH )

于 2014-07-10T05:38:06.867 回答
0

易于使用的简短版本:

SELECT * 
FROM [TableName] t
WHERE t.[DateColumnName] >= DATEADD(month, -1, GETDATE())

DATEADD从 2008 版本开始在 SQL Server中GETDATE可用。MSDN 文档:GETDATEDATEADD

于 2019-02-12T18:51:32.987 回答