Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-电子邮件查询范围_Sql_Sql Server 2008 - Fatal编程技术网

SQL-电子邮件查询范围

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) +

我有一个查询数据库的sql作业。作业计划每24小时运行一次,并发送一封包含所需数据的电子邮件,查询范围为今天07:30到前一天07:30。以下是我电子邮件标题的代码:

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>'