【问题标题】:converting string to date and truncating将字符串转换为日期并截断
【发布时间】:2015-02-28 22:13:11
【问题描述】:

在 BigQuery 中,我有一个名为 Initial_date 的字段,它采用字符串值,例如

19-FEB-13 08.44.22.000000 PM -05:00 19-JUN-13 07.58.32.423526 PM -04:00

我只想返回“2013-02-19”、“2013-06-19”等日期。我该怎么做?

我已经尝试过 DATE(initiated_date) 但它给了我空值。

【问题讨论】:

  • cloud.google.com/bigquery/query-reference#datetimefunctions 您需要使用其中之一....如您所见,不幸的是它不接受您的格式。
  • 它确实取决于您调用查询的方式,但获得所需格式的唯一机会几乎是在检索到它之后通过代码转换它
  • (SUBSTR((STRING (CLAIM_INITIATED_TIME)), 1,9)) 给我 19-FEB-13,这是一个字符串。但在那之后该怎么办?我无法将其转换为我想要的格式。
  • 阅读我发给你的参考资料。它不是在寻找 19-FEB-13 而是一个时间戳。如果您没有时间戳,则 Date() 函数将不会使用它。一旦你的代码中有 19-FEB-13,我相信你可以转换它,不是吗?通过查询本身,它是可行的,但很麻烦,绝对不漂亮

标签: date google-bigquery truncation


【解决方案1】:

如果您真的希望纯 SQL 解决方案进行此类转换 - 这是一种方法:

SELECT yyyy + '-' + IF(LENGTH(m) < 2, '0' + m, m) + '-' + dd FROM (
SELECT 
  '20' + SUBSTR(x, 8, 2) as yyyy,
  STRING(CAST((INSTR('JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC',
                      SUBSTR(x, 4, 3)) - 1) / 3 + 1 AS INTEGER)) as m,
  SUBSTR(x, 1, 2) as dd
FROM
(SELECT '19-FEB-13 08.44.22.000000 PM -05:00' AS x),
(SELECT '02-DEC-12 18.24.12.000000 PM -05:00' AS x),
(SELECT '19-JUN-13 07.58.32.423526 PM -04:00' AS x))

它产生以下输出:

2013-02-19   
2012-12-02   
2013-06-19

【讨论】:

  • 正如我所说.. 麻烦而且绝对不漂亮。但我很欣赏 INSTR 的聪明才智:P
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 2013-10-29
  • 2011-11-28
  • 2016-05-03
相关资源
最近更新 更多