【问题标题】:Is there a way to find or ascertain date or time format from a given value in bigquery?有没有办法从 bigquery 中的给定值查找或确定日期或时间格式?
【发布时间】:2021-07-10 11:29:24
【问题描述】:

我正在尝试为日期和时间数据类型列构建一个过滤器,以检查该列中的所有值是否都遵循相同的格式。假设我们有出生日期,在第 1 行中它保存为 1998-02-18 (%Y-%m-%d),在第 2 行中的值为 14-03-2020 (%d-%m-%Y),第 3 行是2001 年 12 月 5 日(%d/%m/%Y)。都是正确的日期格式,但我想检查它们是否都是统一的。因此,如果我有一个给定的日期,比如 1998-02-18,是否有任何函数或方法可以得到 (%Y-%m-%d) 作为结果?可用于与其他格式进行比较。

【问题讨论】:

  • 它们不是正确的日期格式。 BigQuery 有一个非常好的数据类型,称为 date 来支持日期列。其他任何东西都只是一个字符串。你应该修复数据。
  • 嗨,我说的只是 date 日期类型,在 date 数据类型列中不能有多个日期格式吗?

标签: sql google-cloud-platform google-bigquery


【解决方案1】:

您可以使用safe.parse_date() 检查是否某些值无法转换。以下获取特定模式的异常:

select datecol
from t
where datecol is not null and
      safe.parse_date('%Y-%m-%d', col) is null;

请注意,如果您有不同的格式,可以尝试一下:

select coalesce(safe.parse_date('%Y-%m-%d', col),
                safe.parse_date('%d-%m-%Y', col),
                safe.parse_date('%m-%d-%Y', col)
               )

请注意,这可能会产生不正确的值,因为日期字符串是不明确的,除非您知道格式。我有没有提到您应该修复数据,以便将 date 存储为 date

【讨论】:

  • 好的,也许我不知道这一点,列的数据类型是否可能是 date 并且它在值中具有多个日期格式,如问题?如果是这样的话,我不必担心这种情况
  • @KanishkSrivastava 。 . .不,这是不可能的。 date 使用内部格式。
猜你喜欢
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多