SQL Server 2008时区转换

时间:2012-07-04 09:32:15

标签: sql-server timezone

在我的网络应用程序中,所有日期值在传递到SQL数据库之前都会转换为UTC,然后只要它们在应用程序中显示,就会转换回本地时间。所以底线是数据库中的所有日期都是UTC。

在我开始报告开发之前,这很好用。 Crystal Reports无法(我可以检测到)进行时区转换,因此我需要在将值传递给报表之前在SQL中进行转换。

SQL Server似乎具有更有限的转换日期时间值的能力。我看到的唯一功能是SWITCHOFFSET。这个功能的问题在于它不是日光节省意识,这似乎是一个重大缺陷。在asp.net中,我可以传递带有时区的日期时间值,它会自动将其转换为UTC时间,同时考虑到任何所需的夏令时调整。

在SQL中,而不是说

之类的东西
SWITCHOFFSET (SomeDate,"Eastern Time"),

我现在不得不说

SWITCHOFFSET(SomeDate, "-4:00"). 

但是,如果我从表中提取数据并且我要求3月的所有数据,即夏令时开始的月份,会发生什么?无论如何,其中一些将是不正确的。我可以说-4:00或-5:00,但很明显,不是两者。

是否还有其他一些功能需要调整,坦率地说,如果不知道如何进行夏令时转换,SWITCHOFFSET似乎已经半成品了。

3 个答案:

答案 0 :(得分:1)

我能想到的唯一方法是:

  • 使用C#集成为此创建一个方法;)感谢天堂,你可以回归到它。

  • 使用VIEWS针对它们运行报告。无论如何总是一个好主意,因为它将报告(在您的直接控制之外)与数据库模式分离,这是一个实现细节。我通常有一个报告SCHEMA,它将报告的所有视图作为另一个记录的API。

最后但并非最不重要的是,您可以尝试摆脱SQL Access并使用OData API,但这是一些工作。

无论如何,视图可以使用您编程的方法来转换时间。

答案 1 :(得分:0)

对于使用SSRS报告的用户,您可能能够在SSRS中检测到TimeZone。 有关详细信息,请参阅此处的帖子。

Working with Time Zones in SSRS

答案 2 :(得分:-1)

看起来您的请求可能会被授予

AT TIME ZONE

在SQL 2016中,无论如何