sql - BigQuery : Format ISO Date

标签 sql google-bigquery isodate

我正在尝试解析 ISO Date 8601 格式的时间戳。

示例:2021-04-10T14:11:00Z

此信息存储在 JSON 对象内,因此我将该数据提取为字符串:

我正在寻找的格式是 yy-MM-dd hh:mm 格式,为此我尝试了以下方法

SQL 代码

SELECT document_id,
json_extract(data, '$.Pair') as pair, 
PARSE_TIMESTAMP('%y-%m-%d %H:%M', json_extract(data, '$.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

错误

上面的代码会导致以下错误:

Failed to parse input string '"2021-04-10T03:17:00Z"

我认为,其原因是日期中间的 T

为了放弃我尝试过的更改:

SUBSTR(json_extract(data, '$.AlertTime'), 1, 10))

但是我在不同的行上遇到了错误:

Failed to parse input string '"2021-04-1'

我想知道是否是因为日期的呈现方式(年-月-日)导致日期没有 2 位数字?例如 2021-04-01 而不是 2021-04-1。

但是如果我尝试使用

SUBSTR(json_extract(data, '$.AlertTime'), 1, 11))

我遇到的错误是

Failed to parse input string '"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        |

关于sql - BigQuery : Format ISO Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67062464/

相关文章:

mysql - 2个不同表中webmatrix中的动态sql查询

google-bigquery - 带有 where 子句的 Google Bigquery 表装饰器

google-bigquery - 如何捕获 BigQueryIO.Write 抛出的任何异常并挽救输出失败的数据?

python - 谷歌 BigQuery : creating a view via Python google-cloud-bigquery version 0. 27.0 与 0.28.0

c++ - MongoDB C++,插入时如何添加ISODate值

sql - NVarchar(MAX) 用于短字符串

sql - 双引号情况下的 postgresql 全文搜索行为

mysql - 如果 SQL 查询没有找到结果,则返回默认值

java - yyyy-MM-dd'T'HH :mm:ss. SSSZZ 和 yyyy-MM-dd'T'HH :mm:ss. SSSXXX 之间的区别?

javascript - 从 ISO 日期转换为良好的格式化字符串