Ниже для BigQuery Standard SQL
TIMESTAMP_SUB
поддерживает следующие значения для date_part:
- MICROSECOND
- MILLISECOND
- SECOND
- МИНУТА
- ЧАС
Итак, вам просто нужно проверить ваш пройденный _date_part
и использовать соответствующую «версию», как в примере ниже
#standardSQL
CREATE TEMP FUNCTION TIMESTAMP_AGO(_interval INT64, _date_part STRING) AS (
CASE _date_part
WHEN 'MICROSECOND' THEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL _interval MICROSECOND)
WHEN 'MILLISECOND' THEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL _interval MILLISECOND)
WHEN 'SECOND' THEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL _interval SECOND)
WHEN 'MINUTE' THEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL _interval MINUTE)
WHEN 'HOUR' THEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL _interval HOUR)
END
);
Итак, теперь ниже будет работать
SELECT TIMESTAMP_AGO(24, 'HOUR')
Очевидно, что вы можете добавить UPPER()
к CASE _date_part
, если вы ожидаете ввод без учета регистра и т. Д.