日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Presto SQL 时间日期函数

發布時間:2023/12/9 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Presto SQL 时间日期函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

時間&日期函數

-- 2021-04-15 14:40:18.791 Asia/Shanghai select now()-- 2021-04-15 select current_date-- 14:10:41.586 Asia/Shanghai select current_time-- 2021-04-15 14:13:03.720 Asia/Shanghai select current_timestamp-- 昨天的年月日 select current_date - interval '1' day;-- Asia/Shanghai select current_timezone()-- 輸出long類型timestamp:1610085216 select to_unixtime(cast('2021-01-08 13:53:36' as timestamp)) -- 2021-01-08 select cast('2021-01-08' as date)-- 2021-01-08 00:00:00.000 select cast('2021-01-08' as timestamp)-- 2021-01-10 00:00:00.000 select date_parse('20210110','%Y%m%d')-- 輸出date類型日期:2021-01-08 select date(cast('2021-01-08 10:36:15' as timestamp)) select date(cast('2021-01-08' as timestamp)) -- 輸出varchar類型日期:2021-01-10 select format_datetime(date_parse('20210110','%Y%m%d'),'yyyy-MM-dd')-- 輸出varchar類型日期:2021-01-08 select format_datetime(from_unixtime(to_unixtime(cast('2021-01-08 13:53:36' as timestamp))),'yyyy-MM-dd') select format_datetime(from_unixtime(to_unixtime(cast('2021-01-08' as timestamp))),'yyyy-MM-dd')-- 輸出varchar類型日期:2021-01-08 13:53:36 select format_datetime(from_unixtime(1610085216),'yyyy-MM-dd HH:mm:ss') select format_datetime(from_unixtime(1610085216),'yyyy-MM-dd') -- 輸出date類型日期:2021-01-08 select date_add('day',-2,cast('2020-01-10' as date))-- 輸出date類型日期:2021-04-13 select date_add('day',-2,current_date) select date_add('week',-2,current_date) select date_add('month',-2,current_date) select date_add('quarter',-2,current_date) select date_add('year',-2,current_date)select date_add('millisecond',-2,date_parse('20210110','%Y%m%d')) select date_add('second',-2,date_parse('20210110','%Y%m%d')) select date_add('minute',-2,date_parse('20210110','%Y%m%d')) select date_add('hour',-2,date_parse('20210110','%Y%m%d')) -- date_diff(unit, timestamp1, timestamp2) → bigint select date_diff('day','2021-04-10','2021-04-15')select date_diff('day',date_parse('20210105','%Y%m%d'),date_parse('20210110','%Y%m%d'))select date_diff('day',cast('2020-01-05' as date),cast('2020-01-10' as date)) select date_diff('month',cast('2020-01-05' as date),cast('2020-01-10' as date))

Presto SQL 特殊用法與進階函數

1 try 函數 與 try_cast 函數

try(expression)

try函數會其中表達式的異常情況,并將異常值返回為 NULL,如果不使用try函數,則語句出現異常時將直接報錯導致查詢失敗

您還可以搭配coalesce函數使用特定值替換 NULL 值,比如下列,將字段a轉換為整數,轉換失敗則可轉換為 0

coalesce(try(cast('a' as integer)), 0)

以上類型轉換可以使用 try_cast 函數來實現,try_cast的作用與cast函數一致,都是對值進行類型轉換,區別在于try_cast在類型轉換錯誤時會返回 NULL,避免造成查詢失敗

coalesce(try_cast('a' as integer), 0)

2 時間/日期函數

使用current_date、current_time、current_timestamp、localtime與localtimestamp時不用加圓括號,Presto 也不支持加圓括號的寫法,使用時請注意

2.1 字符串與時間的轉換

可以直接在字符串格式的時間表達式前加關鍵字timestamp,比如timestamp '2020-01-01 00:00:00',即可直接獲得對應的時間

date_parse與date_format分別是字符串轉時間以及時間轉字符串,用法都是傳入需要轉化的字段以及對應的 format,如下分別是字符串$part_date轉時間以及時間#event_time轉字符串:

date_parse("$part_date", '%Y-%m-%d') date_format("#event_time", '%Y-%m-%d %T')

以上函數的 format 格式使用的是 MySQL 的格式,如需使用 JAVA 格式,可使用函數format_datetime與parse_datetime

2.2 時間計算函數

函數date_add可對時間進行偏移,unit為單位,value為偏移量,如果value為負數,則為往前偏移

date_add(unit, value, timestamp)

函數date_diff,用來計算兩個時間的差值,算法是timestamp2 - timestamp1,返回的是單位為unit的整數

date_diff(unit, timestamp1, timestamp2)

兩個函數的unit的取值范圍,可以參考以下表格

單位描述
millisecond毫秒
second
minute分鐘
hour小時
day
week
month
quarter季度
year

3 開窗函數

Presto 支持開窗函數,窗口函數中有不少非常實用的函數,如 first_value 與 last_value 很適合計算一段時間內第一次或最后一次做某事的值。

比如計算每名用戶首次產生購買商品行為時購買的物品:

SELECT user_id,first_purchase_product FROM (SELECT user_id,first_value(product_name) over(partition by user_id order by time) AS first_purchase_product FROM log.purchase) GROUP BY user_id,first_purchase_product

first_value與last_value需要搭配over子句使用,over子句中的partition by類似于group by,即按照所給字段分組,order by則會決定進行排序的字段

4 JSON 解析

在一些特殊場景下,我們建議通過字符串的方式記錄復雜的數據結構,上傳到后臺。那么在之后的使用過程中,可以使用 JSON 解析函數轉化或提取能在 SQL 中使用的數據

4.1 字符串轉 JSON

json_parse可以將符合 JSON 格式的字符串轉成 SQL 中的 JSON 類型數據,兩函數等價:

json_parse('{"abc":[1, 2, 3]}')

4.2 JSON 轉其他類型

轉化為 JSON 的數據,可以通過CAST轉化為其他 SQL 類型的數據,比如將剛剛轉成 JSON 的字符串再次轉成 MAP:

CAST(json_parse('{"abc":[1, 2, 3]}') AS MAP(varchar,array(integer)))

如果希望將字符串重新轉成 JSON,可以使用json_format:

json_format(json_parse('{"abc":[1, 2, 3]}'))

4.3 直接提取 JSON 數據

在很多情況下,只需要提取 JSON 中的部分數據即可,此時可以使用json_extract_scalar進行提取,其通過 JSONPath 表達式進行提取,返回字符串:

json_extract_scalar(json, json_path)

并且json_extract_scalar可以直接對 JSON 的字符串進行提取,無需手動轉化為 JSON 類型,比如以下,提取abc的第一個元素:

json_extract_scalar('{"abc":[1, 2, 3]}','$.abc[0]')

總結

以上是生活随笔為你收集整理的Presto SQL 时间日期函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。