Big Query中PARSE_TIMESTAMP函数无法区分AM/PM的问题咨询
解决BigQuery PARSE_TIMESTAMP无法区分AM/PM的问题
嘿,我太懂你遇到的这个糟心问题了——明明是AM和PM两个不同的时间,用PARSE_TIMESTAMP解析出来结果居然一模一样,确实挺让人困惑的。
咱们来揪出问题根源:你用的格式符%l是12小时制的小时表示,但它要求小时前面必须带一个空格(比如格式里期望的是" 9",而你输入的是"9")。当输入的小时没有前置空格时,PARSE_TIMESTAMP就没法正确识别后面的AM/PM标识,自然就把两条记录都解析成同一个时间了。
那怎么解决呢?很简单,把格式字符串里的%l换成%I就行。%I同样是12小时制的小时表示,但它不要求前置空格,不管你输入的是"9"还是"09"都能正确解析。
修改后的查询语句如下:
SELECT PARSE_TIMESTAMP("%B %e, %Y %I:%M %p", time) FROM ( SELECT 'May 14, 2018 9:46 AM' AS time UNION ALL SELECT 'May 14, 2018 9:46 PM' AS time )
跑这个查询的话,两条记录就会分别解析成2018-05-14 09:46:00和2018-05-14 21:46:00,完全符合你的预期。
如果之后还是遇到类似的区域相关解析问题,还可以显式指定第三个参数locale为'en_US',确保AM/PM的识别逻辑是正确的,比如:
SELECT PARSE_TIMESTAMP("%B %e, %Y %I:%M %p", time, 'en_US') FROM ( SELECT 'May 14, 2018 9:46 AM' AS time UNION ALL SELECT 'May 14, 2018 9:46 PM' AS time )
内容的提问来源于stack exchange,提问作者Sherif ElSherif
相关产品推荐
相关产品推荐

