如何在SQL Server中选择最后七天的日期
我想在select语句中选择最后七天的日期,因为当前日期是2018-07-12 预期结果: 最后七天 2018-07-06 2018-07-07 2018-07-08 2018-07-09 2018-07-10 2018-07-11 2018-07-12 你可以用如何在SQL Server中选择最后七天的日期,sql,sql-server,Sql,Sql Server,我想在select语句中选择最后七天的日期,因为当前日期是2018-07-12 预期结果: 最后七天 2018-07-06 2018-07-07 2018-07-08 2018-07-09 2018-07-10 2018-07-11 2018-07-12 你可以用 DATEADD(DAY, -7, getDate()) < [date_field] 在您的查询中,您可以使用 DATEADD(DAY, -7, getDate()) < [date_field] select * f
DATEADD(DAY, -7, getDate()) < [date_field]
在您的查询中,您可以使用
DATEADD(DAY, -7, getDate()) < [date_field]
select * from your_table
where date_field>=dateadd(day,-7,cast(getdate() as date)) and date_field<cast(getdate() as date)
在您的查询中如果问题中列出的预期结果正是您要查找的结果,这将实现以下目的:
select * from your_table
where date_field>=dateadd(day,-7,cast(getdate() as date)) and date_field<cast(getdate() as date)
SELECT * FROM (
SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
) AS the_table
结果:
Last_Seven_Days_Dates
---------------------
2018-07-05
2018-07-06
2018-07-07
2018-07-08
2018-07-09
2018-07-10
2018-07-11
2018-07-12
由于您声明希望在临时表中使用这些查询,因此我更新了答案,使其成为一个子查询,更易于加入或使用
此外,如果您需要将其放在临时表中,可以执行以下操作:
SELECT * INTO #TempTableName FROM (
SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
)
如果问题中列出的预期结果正是您想要的结果,这将实现以下目的:
SELECT * FROM (
SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
) AS the_table
结果:
Last_Seven_Days_Dates
---------------------
2018-07-05
2018-07-06
2018-07-07
2018-07-08
2018-07-09
2018-07-10
2018-07-11
2018-07-12
由于您声明希望在临时表中使用这些查询,因此我更新了答案,使其成为一个子查询,更易于加入或使用
此外,如果您需要将其放在临时表中,可以执行以下操作:
SELECT * INTO #TempTableName FROM (
SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
UNION
SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
)
我将使用递归CTE:
with dates as (
select cast(getdate() as date) as dte, 1 as cnt
union all
select dateadd(day, 1, dte), cnt + 1
from dates
where cnt < 7
)
select dte
from dates;
我将使用递归CTE:
with dates as (
select cast(getdate() as date) as dte, 1 as cnt
union all
select dateadd(day, 1, dte), cnt + 1
from dates
where cnt < 7
)
select dte
from dates;
我使用以下方法生成日期序列
DECLARE @MinDate DATE = DATEADD(DAY, -7, GETDATE()),
@MaxDate DATE = GETDATE();
SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM sys.all_objects a;
如果需要使其可重用,您可以将其包装在函数中并传入MinDate和MaxDate
DECLARE @MinDate DATE = DATEADD(DAY, -7, GETDATE()),
@MaxDate DATE = GETDATE();
SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM sys.all_objects a;
如果需要使其可重用,您可以将其包装在函数中并传入MinDate和MaxDate可能的重复:可能的重复我不想在任何情况下使用它,只想得到问题中描述的结果并将其存储在临时表可能的重复:可能的重复我不想在任何情况下使用它where条件只需要问题中描述的结果并将其存储在临时表中我不想在任何where条件中使用它只需要问题中描述的结果并将其存储在临时表中我不想在任何where条件中使用它只需要问题中描述的结果并将其存储在临时表中谢谢我也搜索了上面的问题。有什么选择吗?对不起,我不明白这个问题:你在寻找什么选项?除了使用union,还有其他选项可以获得最后七天的日期吗?我想你可以创建一个游标或使用CTE,但我认为最终你需要合并结果。@sniperd我在你的答案中添加了一个插入到临时表的示例,只是更改了结果谢谢,我也搜索了上面的查询。有什么选择吗?对不起,我不明白这个问题:你在寻找什么选项?除了使用union,还有其他选项可以获得最后七天的日期吗?我想你可以创建一个游标或使用CTE,但我认为最终你需要合并结果。@sniperd我在你的答案中添加了一个插入到临时表的示例,只是更改了结果如果你能帮我的话,我会很有帮助的。如果你能帮我的话,我会很有帮助的