比较两个不同时区的日期

问题描述 投票:1回答:2

有没有办法比较SQL Server 2008 R2中不同时区的两个日期(datetime数据类型)?

将PST转换为EST时,我是否需要担心DST?看起来总会有3个小时的差异。

在以下脚本中,交易日期为PST时区,@ Date参数位于EST时区;

DECLARE @Date DATETIME = '2019/03/09 00:01:57.000'

SELECT  
    f.[CustomerNum] ,
    f.[Amount] ,
    f.[TransactionDate] ,
    cus.Linkdate            
FROM    
    [Transaction] f
INNER JOIN 
    dbo.Customer cus ON cus.CusNum = f.CustomerNum AND cus.OID = f.OID
WHERE   
    f.TransactionDate > @Date

这会有用吗?

DATEADD(MINUTE, DATEPART(TZoffset, SYSDATETIMEOFFSET()), fpn.TransactionDate)> DATEADD(MINUTE, DATEPART(TZoffset, SYSDATETIMEOFFSET()), @Date)
sql-server sql-server-2008-r2
2个回答
0
投票

PST和EST之间的偏差是3小时。

WHERE f.TransactionDate > DATEADD(hour, 3, @Date)  

0
投票

如果您的参数对时区敏感,则最好使用明确描述其时区的数据类型,例如datetimeoffset。然后,您可以使用switchoffset更改为您需要的时区。

DECLARE @Date DATETIMEOFFSET = '2019/03/09 00:01:57.000 -05:00' -- EST
SELECT  
    f.[CustomerNum] ,
    f.[Amount] ,
    f.[TransactionDate] ,
    cus.Linkdate            
FROM    
    [Transaction] f
INNER JOIN 
    dbo.Customer cus ON cus.CusNum = f.CustomerNum AND cus.OID = f.OID
WHERE   
    f.TransactionDate > cast(switchoffset(@Date,'-08:00') as datetime) -- PST
© www.soinside.com 2019 - 2024. All rights reserved.