指令說明:
ORACLE
ORACLE所提供的TO_CHAR轉換函數,可針對各種時間格式及NLS_LANGUAGE設定提供日期部分資訊,另外還有EXTRACT函數,將依資料型態不同提供不同日期資料中部位資料進擷取,如 date則擷取年月日資訊,而timestamp則尚可額外擷取時分秒等,另外也支援interval資料型態的擷取。語法整理如下:
語法
|
說明
|
TO_CHAR(date [, 'format'
[, nls_language]])
|
傳回指定格式日期資料
|
EXTRACT(
{
{YEAR|MONTH|DAY|HOUR|MINUTE|SECOND}
| {TIMEZONE_HOUR|TIMEZONE_MINUTE}
| {TIMEZONE_REGION | TIMEZONE_ABBR}
}
FROM {date_value|interval_value}
)
|
傳回指定格式日期資料(依型態略不同)
-
date型態可擷取年月日
-
timestamp型態(包含t1-t2時間差) 可擷取年月日時分秒
-
interval型態可擷取特定部分
|
範例:
|
由於先以ALTER SEESION切換為中文模式,TO_CHAR(SYSDATE, 'Month')將依NLS設定顯示為中文。而於函數中增加NLS_DATE_LANGUAGE=American' 則依設定以顯示英文月份,但請注意預設將字尾以空白字元補足9碼,如欲剔除空白需指定Fm(填充模式)參數。查詢V$NLS_PARAMETERS以確知各項設定:
SELECT *
FROM V$NLS_PARAMETERS
WHERE PARAMETER='NLS_DATE_LANGUAGE'
|
MSSQL
MSSQL提供DATENAME函數可取得部分日期的文字敘述,而DATEPART函數則是取得其整數值,另外,針對常用的年月日部分提供更直接且簡便的YEAR、MONTH及DAY函數,。整理如下表:
語法
|
說明
|
DATENAME(datepart, date)
|
傳回指定日期單位的文字敘述
|
DATEPART(datepart, date)
|
傳回指定日期單位的關聯數值
|
DAY(date)
|
傳回指定日期的「日」整數值
|
MONTH(date)
|
傳回指定日期的月份整數值
|
YEAR(date)
|
傳回指定日期的年份整數值
|
FORMAT(date, format [, culture ] )
|
2012版本提供字格式轉換功能
|
DATENAME及DATEPART兩個函數,第一個引數均為時間單位(Datepart),與先前的DATEADD函數所使用的時間間隔單位(Interval)類似,但日期資訊包含更多其他屬性,如星期幾(dw),另外,週(ww)是代表一年中的週數(1-53),MSSQL 2008還提供週的另外定義ISO Week,詳細參數及其說明請查詢官方網站。第二個引數為目標日期。
對於兩個函數傳回值的差異在於月(mm)及週幾(weekday)兩個,DATENAME函數是傳回「月」及「週幾」的文字敘述,下表是以系統時間以相同參數執行的結果。
datepart參數表
|
執行結果(以2020-06-18 22:58:17.158為例)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
SQL如下,透過CROSS APPLY進行轉置,如下。
SELECT D.*
--,
FORMAT(NOW, dpart) "FMT"
FROM
(
SELECT CAST('2020-06-18
22:58:17.158' AS datetime) Now
) A
CROSS APPLY
(
SELECT *
FROM (VALUES ('yy', DATENAME(yy, Now), DATEPART(yy, Now))
, ('qq', DATENAME(qq, Now), DATEPART(qq, Now))
, ('mm', DATENAME(mm, Now), DATEPART(mm, Now))
, ('dd', DATENAME(dd, Now), DATEPART(dd, Now))
, ('ww', DATENAME(ww, Now), DATEPART(ww, Now))
-------------------------------
, ('hh', DATENAME(hh, Now), DATEPART(hh, Now))
, ('mi', DATENAME(mi, Now), DATEPART(mi, Now))
, ('ss', DATENAME(ss, Now), DATEPART(ss, Now))
, ('ms', DATENAME(ms, Now), DATEPART(ms, Now))
, ('dw', DATENAME(dw, Now), DATEPART(dw, Now))
) DTPart (dpart,
"DATENAME", "DATEPART")
) D
|
FORMAT函數使用如下:
FORMAT函數格式字串
|
以2020-06-18
22:58:17.158為例
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
註: fmt字串可自行組合。
|
SQL
SELECT fmt
, FORMAT(CAST('2020-06-18 22:58:17.158' as datetime), fmt) "default"
, FORMAT(CAST('2020-06-18 22:58:17.158' as datetime), fmt, 'zh-tw')
"zh-tw"
FROM (VALUES ('yy'), ('yyyy')
, ('MM'), ('MMM'), ('MMMM')
, ('dd'), ('dddd'), ('d')
, ('hh'), ('HH')
, ('mm'), ('ss')
, ('tt')
) F (fmt)
|
沒有留言:
張貼留言