首页 > 解决方案 > 在 Big Query 中使用不同的日期格式查询多个表

问题描述

我对使用 BigQuery 和编写查询非常陌生

我想从 2 个不同的表中提取数据,每个表都有一个带有日期戳但格式不同的字段。所有字段都作为纯文本导入,因此我必须将每个字段转换为其他格式。

表 1 的格式为“2020-10-09 00:00:00”,表 2 在日期字段中的格式为“2020-10-09” 这是我使用的代码

SELECT 
e.Region,
e.OmradeNamn,
SAFE_CAST(e.Datum as Date) as Datum,
FORMAT_DATE('%u', SAFE_CAST(e.Datum as Date)) AS Veckodag,
e.Rutt_Stilling,
...
...
...
...
r.NA_ArbPass,

FROM `leveranskvalitet` e 
  LEFT JOIN `rutterap` r 
  ON e.Rutt_Stilling = r.Rutt_Stilling
  and e.Datum = r.Datum

  Where cast(LEFT(e.Datum,10) as date) =  Cast(@DATUM as date)
  ...
  ...
  Order by e.Rutt_Stilling ASC>

从表 2 中它只得到 'NULL'

如果我使用另一个表作为表 1,日期格式为“2020-10-09”,我从表 2 中提取数据没有问题

要选择日期,我使用另一个工作表中的单元格引用 (@Datum)

感谢您对这个罗杰的帮助

标签: google-bigquerydate-format

解决方案


假设数据类型是时间戳和日期,您可以执行以下操作:

with temp_ts as (
 select timestamp('2020-10-09 00:00:00') as ts
),
temp_dt as (
 select date('2020-10-09') as dt
)

select *
from temp_ts t
join temp_dt d
 on extract(date from t.ts) = d.dt;

鉴于您的查询:

SELECT 
e.Region,
e.OmradeNamn,
SAFE_CAST(e.Datum as Date) as Datum,
FORMAT_DATE('%u', SAFE_CAST(e.Datum as Date)) AS Veckodag,
e.Rutt_Stilling,
...
...
...
...
r.NA_ArbPass,

FROM `leveranskvalitet` e 
  LEFT JOIN `rutterap` r 
  ON e.Rutt_Stilling = r.Rutt_Stilling
  and date(cast(e.Datum as datetime) = cast(r.Datum as date)

  Where cast(LEFT(e.Datum,10) as date) =  Cast(@DATUM as date)
  ...
  ...
  Order by e.Rutt_Stilling ASC>

推荐阅读