【问题标题】:date_format() equivalent in BigQueryBigQuery 中的 date_format() 等效项
【发布时间】:2019-02-20 04:17:12
【问题描述】:

我的表中有一个日期列,其中包含格式为 2017-08-05 09-AM 的字符串,我正在尝试对其进行格式化,以便有一个日期类型为日期的列和时间列时间类型。

SELECT ID, DATE_FORMAT(a.date, "%Y-%d-%m") as date, DATE_FORMAT(a.date, "%T") as time, Symbol
FROM `crypto_market_data.BTC_1H` a
ORDER BY ID

查询在 MySQL 中按我希望的方式运行,但 BigQuery 不支持 date_format()。我想知道是否有类似的方法将我的字符串日期转换为单独的日期和时间对象。

【问题讨论】:

  • 您是否特别需要单独的日期和时间列? BigQuery 有一个DATETIME 类型,它结合了DATETIME(请参阅PARSE_DATETIME 函数)。一列比两列的存储更便宜。

标签: sql database google-bigquery


【解决方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT id, Symbol,
  DATE(PARSE_DATETIME('%Y-%m-%d %H-%p', a.date)) AS `date`,
  TIME(PARSE_DATETIME('%Y-%m-%d %H-%p', a.date)) AS time
FROM `project.dataset.table` a

你可以像下面的例子一样使用虚拟数据测试,玩上面的例子

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, '2017-08-05 09-AM' `date`, 'x' Symbol UNION ALL
  SELECT 2, '2019-02-05 12-AM', 'y' UNION ALL
  SELECT 3, '2019-01-31 11-PM', 'z'
)
SELECT id, Symbol,
  DATE(PARSE_DATETIME('%Y-%m-%d %H-%p', a.date)) AS `date`,
  TIME(PARSE_DATETIME('%Y-%m-%d %H-%p', a.date)) AS time
FROM `project.dataset.table` a
-- ORDER BY id

结果

Row id  Symbol  date        time     
1   1   x       2017-08-05  09:00:00     
2   2   y       2019-02-05  12:00:00     
3   3   z       2019-01-31  11:00:00     

【讨论】:

    【解决方案2】:

    有一个 PARSE_DATETIME 函数可用于解析 BigQuery 中的自定义日期时间格式。

    在你的情况下,这应该会有所帮助:

    select ID, extract(date from dt) as date, extract(time from dt) as time, Symbol from (
      select 
         a.ID as ID, 
         parse_datetime('%Y-%d-%m %H-%p', a.date) as dt, 
         a.Symbol as Symbol
      from 
         `crypto_market_data.BTC_1H` a
      order by a.ID
    )
    

    【讨论】:

    • 刚试了一下,报错:无法解析输入字符串“2019-02-05 12-AM”
    • 嗯...我实际上让您的 parse_datetime() 使用SELECT parse_datetime('%Y-%d-%m %H-%p', "2019-02-05 12-AM"); 作为单线工作,但是当我将时间更改为“2019-01-31 11-PM”时,同样的时间-liner 给了我上面提到的错误
    • 如果你想把日期放在月份之前,请使用'%Y-%d-%m %H-%p',如果你想在日期之前使用月份,请使用'%Y-%m-%d %H-%p'。在您的第二个日期中,月份放置在应该是日期的位置。
    猜你喜欢
    • 2012-10-22
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多