我正在寻找一种方法,如果请求来自不同的时区,如何有效地从sql server请求数据。
例如来自澳大利亚的请求(UTC / GMT +11小时)将要求提供超过2005-11-19 18:00:00的记录
但加拿大服务器(UTC / GMT -5小时)和所有记录保存为加拿大人。
加拿大用户通过用户界面将选择2005-11-19 18:00:00'日期,我们将选择sql server
select * from table1 where added < '2005-11-19 18:00:00'
同样从澳大利亚用户中选择,假设用户通过UI选择相同的日期必须
select * from table1 where added < '2005-11-19 02:00:00'
我的问题是从不同的时区查询sql server的正确方法是什么,并假设时区得到结果。
像Effectively Converting dates between UTC and Local (ie. PST) time in SQL 2005这样的答案不起作用,因为我想通过连接以声明方式进行,并且不想在sql中放置任何逻辑。答案 0 :(得分:2)
如果你想及时存储,你应该在数据库上使用UTC(这是最常见的情况,例如记录等)。
如果要存储特定于位置的日期,请使用包含其时区信息的日期时间。例如,为了正确存储包括时间在内的生日(转换为UTC可能会改变日期),这是必需的。
查询同样如此。通常,用户在查询中输入本地时间,并且需要将其转换为UTC以进行查询。但是,如果您查询生日这样的内容,则不希望进行此转换,因为用户无法获得预期结果。
所以答案真的是&#34;它取决于&#34;。最糟糕的是当地时间没有时区信息,因为这通常无法恢复到正确的日期。请注意,夏令时也会影响时区,并且由于规则随时间而变化,即使您知道实际日期和服务器时区(不包括DST),也可能无法正确重建本地日期。
因此,如果您不想在SQL中使用逻辑,请在数据库上使用UTC,并将日期转换为UTC以进行插入/更新/查询。
答案 1 :(得分:-1)
我的问题是从不同的时区查询sql server并获得结果的正确方法是什么 假设时区。
聘请了解问题并在程序代码中处理它的程序员。
我想通过连接以声明方式执行此操作,并且不希望在sql中添加任何逻辑。
糟糕的解决方案。这是一个代码问题。