我需要每晚运行一个SQL脚本,以提取前两天的数据。例如:7月9日凌晨1点,脚本将运行并需要提取7月8日和7月7日的数据。7月10日凌晨1点,它需要提取7月9日和7月8日的数据,等等。
该脚本具有功能性,因为它可以正确提取固定日期范围内的数据(通过在脚本中包括实际日期范围),但是我不知道如何使它执行“前2天”部分。
弄清楚这一点超出了我的范围!谁能提供指导?
使用SQL Server 2014
答案 0 :(得分:1)
您可以这样做:
where datecol >= convert(date, dateadd(day, -2, getdate())) and
datecol < convert(date, getdate())
也就是说,对于将这种逻辑直接放入查询中,我会非常谨慎。我将在SQL Server中创建一个存储过程,并使其带有@fromdate
和@todate
参数。
然后,安排执行上述计算并使用正确的参数调用存储过程的作业。
有一天,当服务器关闭或逻辑故障时,您将可以自行指定日期范围。
答案 1 :(得分:0)
我将创建三个变量。
DATEADD
函数减去两天这应该为您提供2019-07-07 00:00:00.000
至2019-07-08 23:59:59.000
的日期范围
DECLARE @today DATETIME = CAST(GETDATE() AS DATE);
DECLARE @startDate DATETIME = DATEADD(DAY, -2, @today);
DECLARE @endDate DATETIME = DATEADD(SECOND, -1, @today);
在处理日期时,时间通常非常非常重要,请确保您的开始日期从一天的开始开始,结束日期在一天的结束时结束!
您的查询将如下所示:
SELECT *
FROM my_table
WHERE my_date_column BETWEEN @startDate AND @endDate