我尝试使用大查询字符串函数来操作JSON(保存为字符串,因为它已经从firestore流到大查询),并将EPOCH时间戳(以秒为单位)替换为字符串形式的时间戳。
数据中的时间戳数量在每个JSON中可能会有所不同,因此不可能通过一系列替换来完成此操作,我需要基于可变数量的时间戳一次性完成此操作。
示例值:
{
"createdAtTimestamp": {
"_seconds": 1670337132,
"_nanoseconds": 863000000
},
"phoneNo": "+44970000000",
"phoneVerified": false,
"updatedAtTimestamp": {
"_seconds": 1672754379,
"_nanoseconds": 112000000
},
"timestamp3": {
"_seconds": 1669127206,
"_nanoseconds": 112000000
},
"timestamp4": {
"_seconds": 1672909833,
"_nanoseconds": 112000000
},
"PIN": "$2b$10$gsgfdgfsdfdf"
}
我很接近了,我可以运行这个:
SELECT
REGEXP_REPLACE(data,ARRAY_TO_STRING(REGEXP_EXTRACT_ALL(data,'"_seconds":([0-9]+)'),'|'),'\\0')
FROM
`tableXYZ`
因此,类似下面的方法应该可以奏效:
SELECT
,REGEXP_REPLACE(data,ARRAY_TO_STRING(REGEXP_EXTRACT_ALL(data,'"_seconds":([0-9]+)'),'|'),cast(FORMAT_TIMESTAMP("%Y-%m-%dT%X",TIMESTAMP_SECONDS(cast('\\0' as bigint))) as string) )
但这会抛出一个错误,而且我找不到一种方法来处理正则表达式匹配的值(即\0)
有没有人知道这在大查询SQL中是如何实现的?
谢谢
1条答案
按热度按时间vawmfj5a1#
正如Tonion所说,JSON函数更适合于对字符串文本执行操作。
但是可以将时间从秒转换为日期时间: