如何解决BigQuery:格式化 ISO 日期
我正在尝试解析 ISO 日期 8601 格式的时间戳。
示例:batch1.bat F:\_FFMPEG_\bin\01.gif
timeout /T 25
move F:\_FFMPEG_\bin\_*.gif F:\_FFMPEG_\bin\_FILES_\
batch1.bat F:\_FFMPEG_\bin\02.gif
timeout /T 25
move F:\_FFMPEG_\bin\_*.gif F:\_FFMPEG_\bin\_FILES_\
batch1.bat F:\_FFMPEG_\bin\03.gif
timeout /T 25
move F:\_FFMPEG_\bin\_*.gif F:\_FFMPEG_\bin\_FILES_\
此信息存储在 JSON 对象中,因此我将该数据提取为字符串:
我正在寻找的格式是 yy-MM-dd hh:mm 格式,为此我尝试了以下内容
2021-04-10T14:11:00Z
无法解析输入字符串'"2021-04-10T03:17:00Z"
原因是日期中间的T,我相信,
为了放弃我尝试了这个改变:
SELECT document_id,json_extract(data,'$.Pair') as pair,PARSE_TIMESTAMP('%y-%m-%d %H:%M','$.AlertTime')) as alerttime,COUNT(document_id) as alert_count
FROM `Tradingview-alerts-26eb8.alltables.TradingView_000_raw_latest` as alert_view
GROUP BY alerttime,document_id,pair
但是我在另一行遇到错误:
无法解析输入字符串'"2021-04-1'
我想知道是不是因为日期的显示方式(年-月-日)没有 2 位数字?例如 2021-04-01 而不是 2021-04-1。
但是如果我尝试使用
SUBSTR(json_extract(data,'$.AlertTime'),1,10))
我得到的错误是
无法解析输入字符串'"2021-04-10'
解决方法
您需要将这些 ISO 符号作为常量包含在格式说明符中:
select parse_timestamp('%FT%TZ','2021-04-12T17:38:10Z')
| f0_ |
---------------------------
| 2021-04-12 17:38:10 UTC |
UPD:如果您有小数秒,您可以包含可选的毫秒元素 %E*S
而不是时间元素 %T
。对于非 UTC 时间戳,还应该有时区元素:%Ez
。因此,可能的解决方案可能是:
with a as (
select '2021-04-12T20:44:06.95841Z' as ts_str union all
select '2021-04-12T23:44:07.83738+03:00' union all
select '2021-04-12T23:44:08+03:00'
)
select parse_timestamp('%FT%H:%M:%E*S%Ez',regexp_replace(ts_str,'Z$','+00:00')) as ts
from a
| ts |
|--------------------------------|
| 2021-04-12 20:44:06.958410 UTC |
| 2021-04-12 20:44:07.837380 UTC |
| 2021-04-12 20:44:08 UTC |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。