CONCAT 从日期开始的年份和月份并添加自定义日期

CONCAT year and month from date and add custom day

我正在尝试连接日期的年份和月份,并在 Google bigQuery 中添加自定义日期。这可能吗?

我的问题

SELECT  
CONCAT(((EXTRACT(YEAR FROM reportdt)), '-', (EXTRACT(MONTH FROM reportdt)), '01')
) AS 
yo,
brandnm,
EXTRACT(YEAR FROM reportdt) as the_year,
EXTRACT(MONTH FROM reportdt) as the_month 
FROM  table
WHERE reportdt BETWEEN '2018-05-01' AND '2018-11-30' 

我的错误:

"No matching signature for function CONCAT for argument types: STRUCT<INT64, STRING, INT64>. Supported signatures: CONCAT(STRING, [STRING, ...]); CONCAT(BYTES, [BYTES, ...]) at [2:1]"

的预期结果

SELECT<br> CONCAT(((EXTRACT(YEAR FROM reportdt)), '-', (EXTRACT(MONTH FROM reportdt)), '01') AS yo

2018-05-01

请帮忙!

使用 DATE_TRUNC(reportdt, MONTH) 代替

因此您的查询将如下所示

#standardSQL
SELECT  
  DATE_TRUNC(reportdt, MONTH) AS yo,
  brandnm,
  EXTRACT(YEAR FROM reportdt) AS the_year,
  EXTRACT(MONTH FROM reportdt) AS the_month 
FROM  `project.dataset.table`
WHERE reportdt BETWEEN '2018-05-01' AND '2018-11-30'    

如果出于某种原因您必须在此处使用 CONCAT - 请参阅下文

#standardSQL
SELECT  
  CONCAT(CAST((EXTRACT(YEAR FROM reportdt)) AS STRING), '-', CAST((EXTRACT(MONTH FROM reportdt)) AS STRING), '-01') AS yo,
  brandnm,
  EXTRACT(YEAR FROM reportdt) AS the_year,
  EXTRACT(MONTH FROM reportdt) AS the_month 
FROM  `project.dataset.table`
WHERE reportdt BETWEEN '2018-05-01' AND '2018-11-30' 

您可以尝试使用 CAST()

SELECT  
CONCAT((CAST((EXTRACT(YEAR FROM reportdt)) as STRING), '-', CAST((EXTRACT(MONTH FROM reportdt)) as STRING), '01')
) AS 
yo,
brandnm,
EXTRACT(YEAR FROM reportdt) as the_year,
EXTRACT(MONTH FROM reportdt) as the_month 
FROM  table
WHERE reportdt BETWEEN '2018-05-01' AND '2018-11-30'