Google bigquery BigQuery字符串到源中保留时区的时间戳

Google bigquery BigQuery字符串到源中保留时区的时间戳,google-bigquery,Google Bigquery,我看过其他类似的帖子,不确定他们是否能回答这个问题——也许他们能回答,如果我错过了任何可以回答这个问题的要点,我很抱歉 我有一根绳子 "2017-06-16T10:34:57.705+01:00" 如何将其从字符串转换为“Timestamp”类型,但保留精度(毫秒)和时区偏移 TIMESTAMP("2017-06-16T10:34:57.705+01:00") 转换为UTC时间戳并降低毫秒精度,我想要时间戳类型,但保留本地日期与时区的所有精度 FORMAT_TIMESTAMP("%Y-%m-

我看过其他类似的帖子,不确定他们是否能回答这个问题——也许他们能回答,如果我错过了任何可以回答这个问题的要点,我很抱歉

我有一根绳子

"2017-06-16T10:34:57.705+01:00"
如何将其从字符串转换为“Timestamp”类型,但保留精度(毫秒)和时区偏移

TIMESTAMP("2017-06-16T10:34:57.705+01:00")
转换为UTC时间戳并降低毫秒精度,我想要时间戳类型,但保留本地日期与时区的所有精度

FORMAT_TIMESTAMP("%Y-%m-%dT%H:%M:%E*S%Ez",PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%E*S%Ez", "2017-06-16T10:34:57.705+01:00"),"Europe/London")
这保留了精度和偏移量,但是一个字符串-然后我失去了这个尝试转换为时间戳再次时间戳(x)

我觉得我在兜圈子任何帮助谢谢

干杯

该类型是相对于UNIX时代的某个时间点。它具有微秒精度,不编码时区,尽管默认情况下与
时间戳
相关的函数使用UTC,例如用于提取
日期

不清楚为什么要保留时间戳的原始时区,但可以做的一件事是保留一个带有UTC偏移量的整数列,您可以使用
TIMESTAMP\u DIFF
计算忽略字符串中时区的输入时间戳和使用字符串中时区的输入时间戳之间的差异


对于精度,您可以检查所提供的时间戳与
时间戳\u TRUNC
的结果是否相等,例如
毫秒
,以查看精度。我不知道您想对这些信息做什么,但您也可以使用字符串或整数来表示精度。

作为补充,当您应用
PARSE_TIMESTAMP
时,实际上并没有失去精度,您可以使用
UNIX_MILLIS
函数进行检查:

WITH data AS(
  SELECT "2017-06-16T10:34:57.705+01:00" as date union all
  SELECT "2017-06-16T10:34:57.999+01:00" as date
)

SELECT
  date,
  UNIX_MILLIS(PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%E*S%Ez", date, "Europe/London")) millis_date
FROM data
结果:

Row date                            millis_date  
1   2017-06-16T10:34:57.999+01:00   1497605697999    
2   2017-06-16T10:34:57.705+01:00   1497605697705    

感谢Elliot-保留时区的原因是基于时间的查询(例如翻滚窗口)正在使用(至少向区域内的用户显示)图表上的loacl时间,而不是UTC。我们在世界各地都有办事处,希望显示相关时间(例如下订单的时间),包括保留夏令时/夏季时间等。无论如何,我都会将原始文件存储为字符串,因为它是JSON格式的。非常感谢您的评论