【问题标题】:BigQuery 'TIMESTAMP(<date_string>)' returns epoch for invalid string parameterBigQuery 'TIMESTAMP(<date_string>)' 返回无效字符串参数的纪元
【发布时间】:2015-07-27 04:27:50
【问题描述】:

如果提供的参数不是有效的STRING,BigQuery 的 TIMESTAMP(&lt;date_string&gt;) 函数返回纪元时间而不是使查询失败是否正确?

例如:

SELECT TIMESTAMP(2015-06-30) as foo FROM [a_table]

..作为有效 SQL 运行并返回 1970-01-01 00:32:59 UTC

很明显,参数缺少引号,所以:

SELECT TIMESTAMP('2015-06-30') as foo FROM [a_table]

..现在返回 2015-06-30 00:00:00 UTC

相反,PARSE_UTC_USEC(&lt;date_string&gt;) 也需要一个 STRING 参数,当它不是正确的 STRING 时会抱怨:

SELECT PARSE_UTC_USEC(2015-06-30) as foo FROM [a_table]

错误:PARSE_UTC_USEC 的参数必须为 STRING 类型,但为 int64

【问题讨论】:

    标签: google-bigquery timestamp


    【解决方案1】:

    我刚刚对此进行了很多测试,看来行为确实如您所解释的那样:

    默认情况下,TIMESTAMP() 似乎接受一个字符串,但如果它得到一个 int,它会将 is 视为一个 int(我尝试 TIMESTAMP(2011),它给了我 EPOCH + 33 分钟左右(它似乎要填上你的号码))。

    在任何情况下,我认为这两种行为都应该是一致的,这在某种程度上是不可预料的。您可以随时提交缺陷报告或功能请求here 以记录或更改行为。

    【讨论】:

    • 2011 秒是 33 分 31 秒...只是增加了这个秒数吗?
    • 确实如此,但通常 UTC 以毫秒为单位,而不是以秒为单位,因此它必须用一些 0 填充。无论如何,重点不是它在这里返回的确切时间戳,而是它仍然在给出一些东西,什么时候应该出错
    猜你喜欢
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多