sql server文化连接

时间:2011-12-21 15:32:15

标签: sql-server timezone

我正在寻找一种方法,如果请求来自不同的时区,如何有效地从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中放置任何逻辑。

2 个答案:

答案 0 :(得分:2)

如果你想及时存储,你应该在数据库上使用UTC(这是最常见的情况,例如记录等)。

如果要存储特定于位置的日期,请使用包含其时区信息的日期时间。例如,为了正确存储包括时间在内的生日(转换为UTC可能会改变日期),这是必需的。

查询同样如此。通常,用户在查询中输入本地时间,并且需要将其转换为UTC以进行查询。但是,如果您查询生日这样的内容,则不希望进行此转换,因为用户无法获得预期结果。

所以答案真的是&#34;它取决于&#34;。最糟糕的是当地时间没有时区信息,因为这通常无法恢复到正确的日期。请注意,夏令时也会影响时区,并且由于规则随时间而变化,即使您知道实际日期和服务器时区(不包括DST),也可能无法正确重建本地日期。

因此,如果您不想在SQL中使用逻辑,请在数据库上使用UTC,并将日期转换为UTC以进行插入/更新/查询。

答案 1 :(得分:-1)

  

我的问题是从不同的时区查询sql server并获得结果的正确方法是什么   假设时区。

聘请了解问题并在程序代码中处理它的程序员。

  

我想通过连接以声明方式执行此操作,并且不希望在sql中添加任何逻辑。

糟糕的解决方案。这是一个代码问题。