CONCAT год и месяц от даты и добавление пользовательских дней - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь указать год и месяц даты и добавить пользовательский день в 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

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы можете попробовать ниже, используя 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' 
0 голосов
/ 27 ноября 2018

Используйте 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' 
...