You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将存储YYYY-MM格式字符串的local_month列转为timestamp类型?

嘿,我来帮你搞定这个timestamp转换的问题!

首先,你的核心需求是把local_month(格式如"2019-08"的字符串)转换成timestamp数据类型,但你的现有语句最后用了FORMAT_TIMESTAMP,这其实是把timestamp转成了字符串,这就是你可能报错的原因——你最后得到的是字符串,而不是真正的timestamp类型。而且你的步骤有点冗余,其实有更简洁可靠的方法:

方法1:直接拼接日期后解析为timestamp

BigQuery的PARSE_TIMESTAMP函数可以直接解析带日期的字符串,我们只需要给local_month补上当月第一天的日期部分即可:

PARSE_TIMESTAMP("%Y-%m-%d", CONCAT(local_month, "-01")) AS month_timestamp

这个语句会把"2019-08"拼接成"2019-08-01",然后直接解析成timestamp类型,对应时间是2019-08-01 00:00:00 UTC。

方法2:先解析为日期再转timestamp

如果你更倾向于先处理日期,可以用PARSE_DATE直接解析"2019-08"(它会自动默认当月第一天),再转成timestamp:

TIMESTAMP(PARSE_DATE("%Y-%m", local_month)) AS month_timestamp

这个方法和上面的效果完全一致,只是步骤拆分更清晰,同样得到timestamp类型的结果。

为什么你的原语句会有问题?

你的原语句里,虽然通过SUBSTR构造了日期,但最后用FORMAT_TIMESTAMP把timestamp又转成了"01-08-2019"这样的字符串——如果你试图把这个字符串当作timestamp来使用(比如插入到timestamp类型的列),自然会报错,因为它本质还是字符串,不是timestamp类型。

如果你的需求其实是生成"01-08-2019"格式的字符串(而不是timestamp类型),那你的原语句逻辑其实是对的,但更推荐用下面的写法更简洁不易出错:

FORMAT_TIMESTAMP("%d-%m-%Y", TIMESTAMP(PARSE_DATE("%Y-%m", local_month))) AS month_str

内容的提问来源于stack exchange,提问作者skiventist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:36:15