Изучив ваш запрос, я понял, что ваша проблема связана с датами, указанными вами в СЛУЧАЕ, КОГДА .
Ранее я хотел бы указать, что если вам нужно поддержку, касающуюся метода DATE_ADD , вы можете прочитать подробнее здесь , а также другие полезные методы.
По поводу вашего первого запроса я разбил его на две части:
I)
SELECT
CASE
WHEN CAST('2020-01-10' AS date) > CAST('2010-01-09' AS DATE) then 'greater'
ELSE
'none of the options'
END
val;
Выход для этого был "больше" , таким образом, условие было выполнено.
II)
SELECT
CASE
when CAST('2020-01-10' AS date)<= DATE_ADD(CAST('2010-01-09' AS DATE), INTERVAL 7 DAY ) THEN 'less or equal'
ELSE
'none of the options'
END
val;
На выходе было "ни один из вариантов" потому что вы оцениваете, если '2020-01-10' меньше или равно '2010-01-09', что неверно.
Та же проблема возникла в вашем третьем запросе, где вы используете МЕЖДУ метод. В своем утверждении CASE WHEN вы оцениваете, находится ли «2020-01-10» между «2010-01-09» и «2010-01-09», а это не так. Поэтому имеет смысл не возвращать истину.
Об использовании вами методов, вы использовали их правильно, ваша проблема была только в этой незначительной ошибке, которую я объяснил выше.
В качестве дополнительной информации: вы не делаете Вам нужно использовать функцию CAST () внутри вас DATE_ADD () , потому что BigQuery поддерживает принудительное приведение литералов от STRING до ДАТА или TIMESTAMP утверждает, что:
Приведение букв необходимо, когда фактический тип литерала отличается от тип, ожидаемый рассматриваемой функцией. Например, если функция fun c () принимает аргумент DATE, то выражение fun c ("2014-09-27") является допустимым, поскольку литерал STRING "2014-09-27" приводится к DATE.
Подробнее об этом можно прочитать здесь .
Надеюсь, это поможет.