无效字符串参数的 BigQuery 'TIMESTAMP(<date_string>)' returns 纪元
BigQuery 'TIMESTAMP(<date_string>)' returns epoch for invalid string parameter
如果提供的参数不是有效的 STRING
,BigQuery 的 TIMESTAMP(<date_string>)
函数在 return 纪元时间而不是使查询失败的行为是否正确?
例如:
SELECT TIMESTAMP(2015-06-30) as foo FROM [a_table]
..作为有效 SQL 和 returns 1970-01-01 00:32:59 UTC
运行
显然,参数缺少引号,所以:
SELECT TIMESTAMP('2015-06-30') as foo FROM [a_table]
..现在 returns 2015-06-30 00:00:00 UTC
相比之下,PARSE_UTC_USEC(<date_string>)
也需要一个 STRING
参数,当它不正确时会抱怨 STRING
:
SELECT PARSE_UTC_USEC(2015-06-30) as foo FROM [a_table]
Error: Argument to PARSE_UTC_USEC must have type STRING but was int64
我刚刚对此做了很多测试,似乎行为确实如您所解释的那样:
默认情况下,TIMESTAMP() 似乎采用字符串,但如果它得到一个 int,它会将 is 视为一个 int(我尝试使用 TIMESTAMP(2011),它给了我 EPOCH + 33 分钟左右(好像是在补你的号))。
无论如何,我认为这两种行为应该是一致的,这在某种程度上是不期望的。您可以随时提交缺陷报告或功能请求 here 以记录或更改行为。
如果提供的参数不是有效的 STRING
,BigQuery 的 TIMESTAMP(<date_string>)
函数在 return 纪元时间而不是使查询失败的行为是否正确?
例如:
SELECT TIMESTAMP(2015-06-30) as foo FROM [a_table]
..作为有效 SQL 和 returns 1970-01-01 00:32:59 UTC
运行显然,参数缺少引号,所以:
SELECT TIMESTAMP('2015-06-30') as foo FROM [a_table]
..现在 returns 2015-06-30 00:00:00 UTC
相比之下,PARSE_UTC_USEC(<date_string>)
也需要一个 STRING
参数,当它不正确时会抱怨 STRING
:
SELECT PARSE_UTC_USEC(2015-06-30) as foo FROM [a_table]
Error: Argument to PARSE_UTC_USEC must have type STRING but was int64
我刚刚对此做了很多测试,似乎行为确实如您所解释的那样:
默认情况下,TIMESTAMP() 似乎采用字符串,但如果它得到一个 int,它会将 is 视为一个 int(我尝试使用 TIMESTAMP(2011),它给了我 EPOCH + 33 分钟左右(好像是在补你的号))。
无论如何,我认为这两种行为应该是一致的,这在某种程度上是不期望的。您可以随时提交缺陷报告或功能请求 here 以记录或更改行为。