GCP Query - как записать разницу в год? - PullRequest
0 голосов
/ 30 января 2020

Я переписываю запрос улья в запрос GCP, где, по-моему, у меня не получается выполнить эту часть.

(year(CURRENT_DATE) - birth_year BETWEEN 13 AND 15)

Как мне переписать это, чтобы оно работало в среде GCP? По сути, я хочу, чтобы разница между столбцом текущего года и года рождения была между 13 и 15. Обратите внимание, что столбец birth_year - это varchar (т.е. 2004). В настоящее время я получаю эту ошибку.

line 6:22: '-' cannot be applied to bigint, varchar

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 30 января 2020

вам нужно привести к int64

(year(CURRENT_DATE) - cast(birt_year as int64) BETWEEN 13 AND 15)

0 голосов
/ 30 января 2020

Просто используйте fhoffa.x.age():

SELECT fhoffa.x.age('1989-11-9')
  , fhoffa.x.age('1989-11-9 23:01:01 America/Los_Angeles')


# 30.21917808219178
# 30.216438356164385

Поскольку у вас есть только строка с годом рождения, вы можете сделать это:

SELECT fhoffa.x.age(CONCAT(year_from_db, '-01-01'))
FROM (SELECT '1989' year_from_db)

# 31.076712328767123

Вы можете использовать эту функцию свободно, я создал его с помощью этого кода:

CREATE OR REPLACE FUNCTION `fhoffa.x.age`(birth ANY TYPE) AS (
  DATE_DIFF(CURRENT_DATE(), DATE(TIMESTAMP(birth)), YEAR)
  # the next line gives you the fraction of this year in days/365
   + DATE_DIFF(CURRENT_DATE() , DATE_ADD(DATE(TIMESTAMP(birth)), INTERVAL (DATE_DIFF(CURRENT_DATE(), DATE(TIMESTAMP(birth)), YEAR)) YEAR), DAY) / 365
);
0 голосов
/ 30 января 2020

В BigQuery:

(extract(year from CURRENT_DATE) - birth_year) BETWEEN 13 AND 15
0 голосов
/ 30 января 2020

Просто приведите строку к числу перед выполнением арифметики:

year(CURRENT_DATE) - cast(birth_year as int64) between 13 and 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...