日期時間模式(Databricks SQL)
在Databricks SQL中,有幾種常用的datetime使用場景:
CSV和JSON數據源使用模式字符串來解析和格式化日期時間內容。
與轉換相關的Datetime函數
字符串
與日期
或時間戳
.例如:
模式表
Databricks SQL使用下表中的模式字母進行日期和時間戳解析和格式化:
象征 |
意義 |
演講 |
例子 |
---|---|---|---|
G |
時代 |
文本 |
廣告;公元 |
y |
一年 |
一年 |
2020;20. |
D |
day-of-year |
(3)數量 |
189 |
M / L |
month-of-year |
月 |
7;07年;7月;7月 |
d |
月的日期 |
(3)數量 |
28 |
Q /問 |
quarter-of-year |
數字/文本 |
3;03;第三季度;第三季度的 |
E |
一周中的第幾天 |
文本 |
星期二;周二 |
F |
與月中的星期對齊 |
數量(1) |
3. |
一個 |
am-pm-of-day |
am-pm |
點 |
h |
clock-hour-of-am-pm (1 - 12) |
(2)數量 |
12 |
K |
hour-of-am-pm(劃分) |
(2)數量 |
0 |
k |
clock-hour-of-day (24) |
(2)數量 |
0 |
H |
hour-of-day (0-23) |
(2)數量 |
0 |
米 |
minute-of-hour |
(2)數量 |
30. |
年代 |
second-of-minute |
(2)數量 |
55 |
年代 |
fraction-of-second |
分數 |
978 |
V |
時區ID |
zone-id |
美國/ Los_Angeles;Z;塔利班) |
z |
時區名稱 |
區域名稱 |
太平洋標準時間;太平洋標準時間 |
O |
本地化zone-offset |
offset-O |
格林尼治標準時間+ 8;格林尼治標準時間+喂飼;UTC-08:00; |
X |
zone-offset ' Z '為零 |
offset-X |
Z;-08;-0830;塔利班);-083015;08:30:15; |
x |
zone-offset |
offset-x |
+ 0000;-08;-0830;塔利班);-083015;08:30:15; |
Z |
zone-offset |
offset-Z |
+ 0000;-0800;喂飼; |
” |
逃避的文本 |
分隔符 |
|
” |
單引號 |
文字 |
” |
[ |
可選部分開始 |
||
] |
可選部分結束 |
模式字母的數量決定了格式。
文本:文本樣式是根據所使用的模式字母的數量確定的。少於4個模式字母將使用短文本形式,通常是縮寫,例如day-of-week Monday可能輸出“Mon”。確切地說,4個模式字母將使用全文形式,通常是完整的描述,例如,day-of-week Monday可能輸出“Monday”。5個或更多的信件會失敗。
Number(n):這裏的n表示這種datetime模式可以使用的最大字母數。如果字母數為1,則使用最小數字數輸出值,且不填充。否則,將使用數字計數作為輸出字段的寬度,必要時填充0值。
數字/文本:如果模式字母的數量為3或更多,則使用上麵的文本規則。否則使用上麵的數字規則。
分數:使用一個或多個(最多9個)連續
“年代”
字符,例如,嘶嘶
,以解析和格式化幾分之一秒。對於解析,可接受的分數長度可以是[1,連續' S '的數量]。對於格式化,分數長度將被填充為帶0的連續' S '的數量。Databricks SQL支持微秒級的datetime精度,它最多有6位有效數字,但可以在截斷超出部分的情況下解析納米級的datetime。年份:字母的數量決定了使用填充的最小字段寬度。如果字母數為2,則使用簡化的兩位數字形式。對於打印,它輸出最右邊的兩位數字。對於解析,這將使用2000的基值進行解析,結果是2000到2099(包括在內)之間的年份。如果字母的數量小於4(而不是2),那麼符號隻在負年份輸出。否則,當' G '不存在時,如果墊寬超過了,則輸出符號。7個或更多的信件會失敗。
月:遵循數字/文字的規則。文本形式以字母-為基礎
“米”
表示“標準”形式,和“L”
是“獨立”形式。這兩種形式隻是在某些語言中有所不同。例如,在俄語中,' Июль '是July的獨立形式,而' Июля '是標準形式。下麵是所有支持的模式字母的示例:“米”
或“L”
:從1開始的一年中的月份號。兩者之間沒有區別“米”
而且“L”
.從1到9的月份沒有填充。>選擇date_format(日期“1970-01-01”,“米”);1>選擇date_format(日期“1970-12-01”,“L”);12
“毫米”
或“會”
:從1開始的一年中的月份號。第1-9個月添加零填充。>選擇date_format(日期“1970-1-01”,“會”);01>選擇date_format(日期“1970-09-01”,“毫米”);09
“嗯”
:標準形式的簡短文本表示。月份模式應該是日期模式的一部分,而不僅僅是一個獨立的月份,除非是像英語中那樣在固定形式和獨立形式之間沒有區別的地區。>選擇date_format(日期“1970-01-01”,“d嗯”);11月--通過一個格式模式來to_csv()>選擇to_csv(named_struct(“日期”,日期“1970-01-01”),地圖(“dateFormat”,“dd嗯”,“場所”,“俄羅斯”));01янв.
“嗯”
:標準格式的完整文本月份表示。它用於解析/格式化月份作為日期/時間戳的一部分。SELECT date_format(date '1970-01-01', 'd MMMM');1月1日—傳遞一個格式pttern給to_csv() > SELECT to_csv(named_struct('date', date' 1970-01-01'), map('dateFormat', 'd MMMM', 'locale', 'RU'));1января
am-pm:輸出上午的時間。模式字母數必須為1。
時區ID(V):輸出顯示時區ID。模式字母數必須為2。
區域名稱(z):輸出時區ID的顯示文本名稱。如果字母數為1、2或3,則輸出短名稱。如果字母的數量為4,則輸出全名。五封或五封以上的信件會失敗。
偏移量X和X:這將根據模式字母的數量格式化偏移量。一個字母隻輸出小時,例如' +01 ',除非分鍾非零,在這種情況下分鍾也會輸出,例如' +0130 '。兩個字母輸出小時和分鍾,不帶冒號,例如' +0130 '。三個字母輸出小時和分鍾,帶冒號,例如' +01:30 '。四個字母輸出小時、分鍾和可選的秒,不帶冒號,例如' +013015 '。五個字母輸出小時、分鍾和可選的秒,帶有冒號,例如' +01:30:15 '。六封或六封以上的信件會失敗。當要輸出的偏移量為零時,模式字母' X '(大寫)將輸出' Z ',而模式字母' X '(小寫)將輸出' +00 '、' +0000 '或' +00:00 '。
偏移量O:這將根據模式字母的數量格式化本地化偏移量。一個字母輸出本地化偏移量的短形式,這是本地化偏移量文本,例如' GMT ',帶有不帶前導零的小時,可選的2位數分和秒(如果非零),以及冒號,例如' GMT+8 '。四個字母輸出完整的表單,它是本地化的偏移文本,例如' GMT,帶有2位小時和分鍾字段,如果非零則可選第二個字段,以及冒號,例如' GMT+08:00 '。其他的計數都不會成功。
偏移量Z:這將根據模式字母的數量格式化偏移量。一個、兩個或三個字母輸出小時和分鍾,不帶冒號,例如' +0130 '。當偏移量為零時,輸出為' +0000 '。四個字母輸出本地化偏移量的完整形式,相當於offset - o的四個字母。如果偏移量為零,則輸出為相應的本地化偏移文本。五個字母輸出小時、分鍾,如果非零則輸出可選的秒,帶冒號。如果偏移量為零,則輸出' Z '。六封或六封以上的信件會失敗。
可選部分start和end:使用
[]
定義一個可選的部分,可能是嵌套的。在格式化過程中,即使在可選部分中也會輸出所有有效數據。在解析過程中,解析的字符串中可能沒有整個部分。可選部分由[
最後使用]
(或在圖案的結尾)。' E ', ' F ', ' q '和' q '的符號隻能用於日期時間格式,例如:
date_format
.它們不允許用於日期時間解析,例如:to_timestamp
.