แปลงข้อมูลที่นำเข้าให้เป็นวันที่พร้อม time zone
หลังจากที่ได้ทำความรู้จักกับฟังก์ชันการแปลงแบบ type-safe ทั้งสามตัวแล้ว ถึงเวลานำไปใช้กับชุดข้อมูลจริง ในแบบฝึกหัดนี้ จะทำการ parse ข้อมูลจากตาราง dbo.ImportedTime ซึ่งเป็นตารางที่โหลดข้อมูลมาจากแอปพลิเคชันอื่นและเคยดูไปแล้วในแบบฝึกหัดก่อนหน้า คราวนี้จะดึงข้อมูลทุกแถว ไม่ใช่เฉพาะแถวที่แอปพลิเคชันระบุว่าถูกต้องเท่านั้น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาใน SQL Server
คำแนะนำการฝึกหัด
- เติมชื่อฟังก์ชัน
TRY_XXX()ที่หายไปใน common table expression ชื่อEventDates - แปลงวันที่
EventDateOffsetให้เป็น'UTC'แล้วตั้งชื่อผลลัพธ์ว่าEventDateUTC - แปลงวันที่
EventDateOffsetให้เป็น'US Eastern Standard Time'โดยใช้AT TIME ZONEแล้วตั้งชื่อผลลัพธ์ว่า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;