将导入的数据转换为带时区的日期
既然已经了解了三种类型安全的转换函数,接下来就把它们应用到真实数据集上。在本练习中,您将从 dbo.ImportedTime 表中解析数据。我们曾用另一个应用程序向该表加载数据,并在先前练习中查看过。这一次,我们将检索所有行的数据,而不仅仅是导入应用程序标记为有效的那些。
本练习是课程的一部分
SQL Server 中的时间序列分析
练习说明
- 在
EventDates公共表表达式中,补全缺失的TRY_XXX()函数名。 - 将
EventDateOffset事件日期转换为'UTC',并将该输出命名为EventDateUTC。 - 使用
AT TIME ZONE将EventDateOffset事件日期转换为'US Eastern Standard Time',并将该输出命名为EventDateUSEast。
交互式实操练习
通过完成这段示例代码来试试这个练习。
WITH EventDates AS
(
SELECT
-- Fill in the missing try-conversion function
___(DATETIME2(3), it.EventDate) AT TIME ZONE it.TimeZone AS EventDateOffset,
it.TimeZone
FROM dbo.ImportedTime it
INNER JOIN sys.time_zone_info tzi
ON it.TimeZone = tzi.name
)
SELECT
-- Fill in the approppriate event date to convert
CONVERT(NVARCHAR(50), ed.EventDateOffset) AS EventDateOffsetString,
CONVERT(DATETIME2(0), ed.EventDateOffset) AS EventDateLocal,
ed.TimeZone,
-- Convert from a DATETIMEOFFSET to DATETIME at UTC
CAST(ed.EventDateOffset AT TIME ZONE '___' AS DATETIME2(0)) AS EventDateUTC,
-- Convert from a DATETIMEOFFSET to DATETIME with time zone
CAST(ed.EventDateOffset ___ ___ ___ 'US Eastern Standard Time' AS DATETIME2(0)) AS EventDateUSEast
FROM EventDates ed;