BigQuery带时区字符串转DATE遇Invalid date error,如何解决?
解决BigQuery中带时区的字符串转DATE类型的问题
直接用CAST(my_date AS DATE)报错是因为BigQuery的DATE类型转换函数没法直接解析包含时间和时区标识的完整字符串——它只支持纯日期格式(比如YYYY-MM-DD)的转换。你可以通过先转成TIMESTAMP再转DATE的方式解决,这里有两种常用的靠谱方法:
方法一:利用TIMESTAMP自动解析
因为你的数据都是UTC时区,BigQuery的TIMESTAMP()函数可以直接识别这种带UTC标识的时间字符串,之后再转成DATE即可:
SELECT DATE(TIMESTAMP(my_date)) AS formatted_date, stuff_here, stuff_here FROM `your-project.your-dataset.your-table`
方法二:用PARSE_TIMESTAMP指定格式(更稳妥)
如果担心后续数据格式有变化,或者需要明确指定解析规则,可以用PARSE_TIMESTAMP配合格式字符串来精准解析,再转DATE:
SELECT DATE(PARSE_TIMESTAMP("%Y-%m-%d %H:%M:%S %Z", my_date)) AS formatted_date, stuff_here, stuff_here FROM `your-project.your-dataset.your-table`
这里的%Y-%m-%d %H:%M:%S %Z完全匹配你给出的YYYY-MM-DD HH:MM:SS TIMEZONE格式,其中%Z用来匹配时区标识(比如UTC)。
两种方法都能避免Invalid date error,顺利将带UTC时区的字符串列转换为DATE类型,导出到新表也不会有问题。
内容的提问来源于stack exchange,提问作者Simon Breton
相关产品推荐
相关产品推荐

