2016-12-06 22 views
-1

我的系统昨天返回所有数据,但它应该做的是它应该从今天返回所有数据,我的代码在本地数据库中工作,但是当我上传它时在网络上,并开始使用在线数据库出现问题GETDATE()与我的系统时间不匹配

这里是我的SQL代码:

CREATE PROCEDURE [dbo].[DisplayReservationToday] 
AS 
    SELECT DISTINCT 
     r1.RESERVATION_ID, r4.LAST_NAME + ', ' + r4.FIRST_NAME AS NAME, 
     r2.ROOM_ID, r3.ROOM_TYPE, r2.NO_GUEST, 
     CONVERT(DATE, r2.ARRIVAL_DATE) AS ADate, 
     CONVERT(DATE, r2.DEPARTURE_DATE) AS DDate, r2.STATUS 
    FROM 
     TBL_Transaction AS r1, TBL_SubTransaction AS r2, 
     TBL_Room AS r3, TBL_Client AS r4 
    WHERE 
     r1.RESERVATION_ID = r2.RESERVATION_ID 
     AND r2.ROOM_ID = r3.ROOM_ID 
     AND r1.USERNAME = r4.USERNAME 
     AND UPPER(r2.STATUS) != UPPER('Cancelled') 
     AND CONVERT(DATE, r2.ARRIVAL_DATE) = CONVERT(DATE, GETDATE()) 
+2

可能是您的网络服务器是不同的时区域 –

+0

所以我的代码可以吗?我唯一应该做的就是联系我的在线服务器? – Newbie10

+1

就像@Prdp说的那样,你的数据库服务器所在的时区与你自己的位置有所不同。一种中和时区差异的方法是使用UTC作为存储和检索数据的标准,并使用'GETUTCDATE()'而不是'GETDATE()'。你总是可以重置数据库服务器上的时区以及备用解决方案 – ughai

回答

4

发生这种情况可能是因为在线数据库服务器是在不同的时区比你本地机器。

GETDATE()返回数据库服务器所在时区的本地日期时间值,因此您需要根据本地计算机所属的时区获取日期。

例如,转换为IST(印度标准时间)使用偏移的5.30

SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30') as [CurrentDateTime] 

所以在您的查询,你可以做的改变

. 
. 
AND CONVERT(DATE, r2.ARRIVAL_DATE) = CONVERT(DATE, SWITCHOFFSET(SYSDATETIMEOFFSET(), '+05:30')) 

SYSDATETIMEOFFSET()