【问题标题】:How to convert Timestamp to Date Data Type in Google Bigquery如何在 Google Bigquery 中将时间戳转换为日期数据类型
【发布时间】:2017-01-15 09:17:08
【问题描述】:

我正在尝试使用以下方法将时间戳数据类型列转换为日期数据类型:

bq query -q --destination_table=NEW_DATE_TABLE --replace "SELECT DATE(CURR_DT) AS CURR_DT from TEST.DATE_TABLE"

新表将该列显示为STRING,而不是date。有没有办法将时间戳转换为date 数据类型。

Requested Screenshot

【问题讨论】:

  • 刚查了前面的问题,为什么不能使用TIMESTAMP_MILLIS/ MICROS?提问的时候没有加回这个功能吗?

标签: google-bigquery


【解决方案1】:

如果您使用Standard SQL,您可以执行以下操作:

SELECT * REPLACE(EXTRACT(DATE FROM curr_dt)) AS curr_dt FROM test.date_table

如果 curr_dt 是重复字段,那么解决方案将如下所示:

SELECT * REPLACE(
  ARRAY(
    SELECT EXTRACT(DATE FROM curr_dt) FROM t.curr_dt
  ) AS curr_dt)
FROM test.date_table t

【讨论】:

  • 谢谢。切换到标准 SQL 并运行提取日期工作正常。
  • 快速提问 - 这是否适用于嵌套表(重复)?
  • 更新了答案以包括如何处理重复字段。
  • 感谢您的回复。与 SQL 一起使用时遇到问题,因为替换无法检测到重复列。标准 SQL 语法不允许检测“重复的 group.column”。 SELECT * REPLACE( ARRAY( SELECT EXTRACT (DATE FROM DTL.SKU_CRT_DT ) FROM t.DTL ) as SKU_CRT_DT ) FROM IntegrationTest_SalesAggregator.POS_JRNL_SLS_DASHBOARD_BAK_20150101 t 错误:SELECT * REPLACE 列表中的列 SKU_CRT_DT 在 [4:8] 不存在
  • 意味着我无法加载具有以下结构的表:SLS_DT TIMESTAMP DTL RECORD REPEATED DTL.SKU_CRT_DT TIMESTAMP
【解决方案2】:

请考虑以下内容!
适用于传统 SQL 和标准 SQL

SELECT CAST(DATE(CURR_DT) AS DATE) AS CURR_DT FROM TEST.DATE_TABLE

添加到地址评论

试试下面 - 正如我上面提到的 - 它适用于旧版和标准版

SELECT CAST(DATE(CURR_DT) AS DATE) AS CURR_DT
FROM (SELECT CURRENT_TIMESTAMP() AS CURR_DT)  

如果您有兴趣让您的案例使用旧版 SQL - 请提供有关 CURR_DT 字段的更多详细信息

【讨论】:

  • 谢谢。它适用于标准 SQL。选中旧 sql 框时,它给了我一个错误。可能是我没有正确使用它............查询失败错误:无效的函数名:DATE_CAST;你的意思是 DATE_ADD 吗?作业 ID:np-sales-thd:bquijob_66fa6a82_15705fb227
  • 这意味着您的字段不是真正的时间戳数据类型。看例子——我只是为了证明而添加的
  • 顺便说一句,刚刚在错误消息中注意到 - DATE_CAST - 这不是我的示例的一部分 - 所以它很可能在其他地方失败 - 如果你想修复它,请显示你使用的整个查询跨度>
  • 当我使用标准 SQL 运行您的 SQL(基于 current_timestamp() 编写)时,它会给出今天的日期。当我使用 Legacy SQL(选中框)运行相同的 SQL 时,它给了我以下错误:错误:无效的函数名称:DATE_CAST;您的意思是 DATE_ADD?
  • 我相信你——但也相信我——我只是再次运行它,它对我有用——没有“有趣”的错误。最有趣的是 - 这个DATE_CAST 来自哪里?您可以发布您的屏幕截图并显示查询编辑器并扩展选项吗?肯定有问题
【解决方案3】:

试试这个

SELECT TIMESTAMP_SECONDS(CAST(CURR_DT AS INT64)) AS CURR_DT FROM TEST.DATE_TABLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2021-03-25
    • 2021-11-19
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多