許多設計偏好將[日期型態]資料拆分成[日期]、[時間]兩個欄位資料(字串或數值型態),對於ORACLE而言,可直接使用TO_DATE函數進行各態樣的日期字串的轉換成日期型態。MSSQL常透過CAST進行日期轉換,但需符合兩項重點: 1.日期、時間中間需含空白及2. 時間間隔符號(:),因此需先處理以符合轉換格式,也可使用本範例所介紹agent_datetime內建函數,簡化煩瑣處理步驟。
SELECT TRADE_DATE, TRADE_TIME
--方法1: 一般作法 (需先處理符合日期轉換格)
, CAST(E.TRADE_DATE + ' '
+ SUBSTRING(E.TRADE_TIME, 1, 2) + ':'
+ SUBSTRING(E.TRADE_TIME, 3, 2) + ':'
+ SUBSTRING(E.TRADE_TIME, 5, 2)
AS DATETIME
) TR_DT
----
--方法2: 使用agent_datetime函數
, msdb.dbo.agent_datetime(TRADE_DATE, TRADE_TIME) TR_DT2
FROM
(
--嘗試轉型為數字
--SELECT
20180112 TRADE_DATE, 081500 TRADE_TIME--重要範例
--UNION
ALL
SELECT '20180112' TRADE_DATE, '081500' TRADE_TIME
UNION ALL
SELECT '20180112' TRADE_DATE, '131500' TRADE_TIME
UNION ALL
SELECT '20180112' TRADE_DATE, '131530' TRADE_TIME
) E
|
將[日期型態]資料拆分成[日期]、[時間]兩個文字或數值型態的欄位資料,雖可簡化純指令式的Ad
hoc查詢處理,但後續如需日期運算則內建函數無法直接使用,需先行轉態。本範例所介紹agent_datetime內建函數可輕鬆完成完成換程序,如使用數值型態方式時,則更可凸顯其方便性,以早上08:15:00如以數值型態儲存時則變為081500,當轉換時,更需額外處理補足碼問題。
沒有留言:
張貼留言