Sql server 2012 运行昨天的每日报告

Sql server 2012 运行昨天的每日报告,sql-server-2012,Sql Server 2012,我需要在凌晨1点为昨天来过酒店的所有顾客做一份报告。我不明白我做错了什么。我尝试如下,但它没有给我任何记录。检查日期格式为“2015-09-02 06:45:00.000”。请帮忙。谢谢 Select top 5 * from Customers where CheckInDate = DATEADD(day, -1, GETDATE()) 工作如下: select top 5 * from Customers where cast(CheckInDate as date) = DATEFR

我需要在凌晨1点为昨天来过酒店的所有顾客做一份报告。我不明白我做错了什么。我尝试如下,但它没有给我任何记录。检查日期格式为“2015-09-02 06:45:00.000”。请帮忙。谢谢

Select top 5 * from Customers where CheckInDate =  DATEADD(day, -1, GETDATE())
工作如下:

select top 5 * from Customers where cast(CheckInDate as date) = DATEFROMPARTS(YEAR(GETDATE()-1), MONTH(GETDATE()-1), DAY(GETDATE()-1))
试试这个

SELECT top 5 from Customers where CheckInDate = DATEADD(DAY,DATEDIFF(DAY,0,'2015-09-02 06:45:00.000'),0) - 1
DateAdd
函数将日期转换为
2015-09-02 00:00:00.000
格式,然后减去-1天。i、 e.
2015-09-01 00:00:00.000

您可以将存储过程中的日期作为参数传递,其余的将由select语句处理


希望这对你有所帮助。

你的昨天是一个交易日-1吗?也许这会有帮助

select top 5 * from Customers where cast(CheckInDate as date) = DATEFROMPARTS(YEAR(GETDATE()-1), MONTH(GETDATE()-1), DAY(GETDATE()-1))
select top 5 * from customers where checkindate 
BETWEEN
        CONVERT(DATETIME, CONVERT(VARCHAR(20),(GETDATE() - 1),101) + ' 00:00') -- start of the day or you can modify it base on your report cut-off
    AND CONVERT(DATETIME, CONVERT(VARCHAR(20),(GETDATE() - 1),101) + ' 23:59') -- until end of the day or '23:59' of the GETDATE() - 1
它的作用是

(GETDATE()-1),101)
='09/03/2015' 然后“00:00”会给出“09/03/2015 00:00:00”,然后再次将其转换为datetime作为筛选器


希望这会有所帮助。

您有hh:mm:ss部分,可能会有所不同,将两者转换为日期或在日期00:00:00和日期23:59:59之间使用
,其中
DATE(CheckInDate)=..
TOP也需要订单,因为我确实从客户那里选择了TOP 5*,cast(CheckInDate as DATE)=DATEADD(day,-1,GETDATE()……还是没有结果。我试过datefromparts,效果很好。我更新了原始问题中的解决方案。报告需要在夜间自动运行,因此我不能使用任何手动日期“2015-09-02 06:45:00.000”。请在Sql Server中创建并计划作业。我更喜欢编写一个存储过程,您也可以编写sql查询。这里有来自stackoverflow的链接,用于安排sql server中的jon每天运行。。虽然此代码可能会回答该问题,但提供有关此代码为什么和/或如何回答该问题的附加上下文可提高其长期价值。