Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 Server从上一日期的特定时间到当前日期的特定时间_Sql_Sql Server_Datetime_Date Arithmetic - Fatal编程技术网

查询SQL Server从上一日期的特定时间到当前日期的特定时间

查询SQL Server从上一日期的特定时间到当前日期的特定时间,sql,sql-server,datetime,date-arithmetic,Sql,Sql Server,Datetime,Date Arithmetic,对不起,我的问题是noobsql。我在SQL中有一个带有DateTime列的表。我需要每天运行一个脚本来显示从昨天上午8点到今天上午8点的所有行。例如,今天我要跑: select * from Table Where DateTime > '2020-12-30 08:00:00.000' and DateTime < '2020-12-31 08:00:00.000' 选择* 从桌子上 其中DateTime>'2020-12-30 08:00:00.000'和DateTime=D

对不起,我的问题是noobsql。我在SQL中有一个带有DateTime列的表。我需要每天运行一个脚本来显示从昨天上午8点到今天上午8点的所有行。例如,今天我要跑:

select *
from Table
Where DateTime > '2020-12-30 08:00:00.000' and DateTime < '2020-12-31 08:00:00.000'
选择*
从桌子上
其中DateTime>'2020-12-30 08:00:00.000'和DateTime<'2020-12-31 08:00:00.000'
我也知道我可以运行此功能,但这只会给我前一天到当前时间:

select *
from Table
Where DateTime >= DATEADD(day,-1, GETDATE()) and DateTime < GETDATE())
选择*
从桌子上
其中DateTime>=DATEADD(day,-1,GETDATE())和DateTime
但是,有没有办法创建脚本,这样我就可以从昨天上午8点到今天上午8点,而无需每天手动编辑脚本?

我建议:

select *
from mytable
where 
    datetime >= dateadd(hour, 8, dateadd(day, -1, convert(datetime, convert(date, getdate()))))
    and datetime < dateadd(hour, 8, convert(datetime, convert(date, getdate()))))
选择*
从mytable
哪里
datetime>=dateadd(小时,8,dateadd(天,-1,转换(datetime,转换(日期,getdate()))
和datetime
我建议:

select *
from mytable
where 
    datetime >= dateadd(hour, 8, dateadd(day, -1, convert(datetime, convert(date, getdate()))))
    and datetime < dateadd(hour, 8, convert(datetime, convert(date, getdate()))))
选择*
从mytable
哪里
datetime>=dateadd(小时,8,dateadd(天,-1,转换(datetime,转换(日期,getdate()))
和datetime
您可以将
getdate()
转换为
date
并返回到
datetime
将其截断为今天的00:00:00。然后使用
dateadd()
,但使用小时-昨天08:00:00为16,今天08:00为+8

SELECT *
       FROM elbat
       WHERE nmuloc >= dateadd(hour, -16, convert(datetime, convert(date, getdate())))
             AND nmuloc < dateadd(hour, 8, convert(datetime, convert(date, getdate())));
选择*
来自厄尔巴特
其中nmuloc>=dateadd(小时,-16,转换(datetime,转换(date,getdate()))
和nmuloc
您可以将
getdate()
转换为
date
并返回到
datetime
将其截断为今天的00:00:00。然后使用
dateadd()
,但使用小时-昨天08:00:00为16,今天08:00为+8

SELECT *
       FROM elbat
       WHERE nmuloc >= dateadd(hour, -16, convert(datetime, convert(date, getdate())))
             AND nmuloc < dateadd(hour, 8, convert(datetime, convert(date, getdate())));
选择*
来自厄尔巴特
其中nmuloc>=dateadd(小时,-16,转换(datetime,转换(date,getdate()))
和nmuloc
至少不会抛出错误。。。但它不会返回任何结果。编辑:第一个1必须是-1。我想这正是我想要的!谢谢@克里斯托弗:我刚刚解决了算术中的一个问题。它现在应该可以按要求工作了。那一个至少不会抛出错误。。。但它不会返回任何结果。编辑:第一个1必须是-1。我想这正是我想要的!谢谢@克里斯托弗:我刚刚解决了算术中的一个问题。现在应该可以按要求工作了。