SQL-电子邮件查询范围
我有一个查询数据库的sql作业。作业计划每24小时运行一次,并发送一封包含所需数据的电子邮件,查询范围为今天07:30到前一天07:30。以下是我电子邮件标题的代码:SQL-电子邮件查询范围,sql,sql-server-2008,Sql,Sql Server 2008,我有一个查询数据库的sql作业。作业计划每24小时运行一次,并发送一封包含所需数据的电子邮件,查询范围为今天07:30到前一天07:30。以下是我电子邮件标题的代码: INSERT INTO @ReportContentBuilder VALUES('<h4>Query Range : ' + DATENAME(WEEKDAY,@StartTimestamp) + ', ' + CONVERT(varchar, @StartTimestamp, 106) +
INSERT INTO @ReportContentBuilder VALUES('<h4>Query Range : ' + DATENAME(WEEKDAY,@StartTimestamp)
+ ', ' + CONVERT(varchar, @StartTimestamp, 106) + ' ' + CONVERT(varchar, @StartTimestamp, 108)
+ ' (UTC) to ' + DATENAME(WEEKDAY,@EndTimestamp) + ', ' + CONVERT(varchar, @EndTimestamp, 106)
+ ' ' + CONVERT(varchar, @EndTimestamp, 108) + ' (UTC)</h4>')
以下是我的电子邮件标题的预期输出:
查询范围:2014年11月19日星期三07:30:00(UTC)至2014年11月20日星期四07:30:00(UTC)
我的问题是@EndTimestamp的值是多少
如果我使用GETUTCDATE()并且作业运行延迟2分钟,则范围不正确。我也不想硬编码,因为每次夏时制都需要更改。诀窍在于“动态”部分是当前时间(GETUTCDATE())和7:30之间的差异。因此,使用@timeDiff,您可以处理ecuation的这个动态部分。尝试此操作(用所需的插入替换上一次选择;我只测试了输出):
DECLARE@StartTimestamp-datetime
声明@EndTimestamp datetime=GETUTCDATE()
声明@timeDiff time
设置@timeDiff=CONVERT(时间,(@EndTimestamp-cast('1900-01-01 07:30:00.000'作为日期时间)))
选择@EndTimestamp=dateadd(秒,
日期部分(小时,@timeDiff)*-3600+
日期部分(分钟,@timeDiff)*-60+
日期部分(秒,@timeDiff)*-1,
@结束时间戳)
设置@StartTimestamp=DATEADD(天,-1,@EndTimestamp)
选择@StartTimestamp、@EndTimestamp
选择“查询范围:”+DATENAME(工作日,@StartTimestamp)
+“,”+转换(varchar,@StartTimestamp,106)+“+”转换(varchar,@StartTimestamp,108)
+“(UTC)到“+DATENAME(工作日,@EndTimestamp)+”,”+转换(varchar,@EndTimestamp,106)
+''+转换(varchar,@EndTimestamp,108)+'(UTC)'
SET @StartTimestamp = CAST((CONVERT(varchar(11), DATEADD(DAY, -1, @EndTimestamp), 106) + ' 07:30') as datetime)
DECLARE @StartTimestamp datetime
DECLARE @EndTimestamp datetime = GETUTCDATE()
DECLARE @timeDiff time
SET @timeDiff = CONVERT(time, (@EndTimestamp - cast('1900-01-01 07:30:00.000' as datetime)))
SELECT @EndTimestamp = dateadd(second,
datepart(hour,@timeDiff) * -3600 +
datepart(minute,@timeDiff) * -60 +
datepart(second,@timeDiff) * -1,
@EndTimestamp)
SET @StartTimestamp = DATEADD(DAY, -1, @EndTimestamp)
SELECT @StartTimestamp, @EndTimestamp
SELECT '<h4>Query Range : ' + DATENAME(WEEKDAY,@StartTimestamp)
+ ', ' + CONVERT(varchar, @StartTimestamp, 106) + ' ' + CONVERT(varchar, @StartTimestamp, 108)
+ ' (UTC) to ' + DATENAME(WEEKDAY,@EndTimestamp) + ', ' + CONVERT(varchar, @EndTimestamp, 106)
+ ' ' + CONVERT(varchar, @EndTimestamp, 108) + ' (UTC)</h4>'