我具有以下WHERE
条件:
order_date between date_add(
CAST(concat( YEAR(current_timestamp()), '-',
MONTH(current_timestamp()), '-',
DAY(current_timestamp()),' ',
hour(current_timestamp())) as datetime) ,interval -1 hour)
and
CAST(concat( YEAR(current_timestamp()), '-',
MONTH(current_timestamp()), '-',
DAY(current_timestamp()), ' ',
hour(current_timestamp())) as datetime)
此条件在MySQL上很好用,但在BigQuery上不起作用。 它给出:
Error: Function not found: YEAR
我不理解此错误,因为YEAR
是SQL standard
-BigQuery确实支持它。
这是什么问题? (我正在寻找SQL标准解决方案)
我想也有更好的方法可以达到此条件,因此欢迎提出任何改进建议。
示例:
计算时间为current_timestamp()
,计算时间为1小时,因此:
如果current_timestamp() = 2018-12-17 11:42:52
它给出:
Between `2018-12-17 10:00:00` and `2018-12-17 11:00:00`
答案 0 :(得分:3)
我想你想要
order_date >= datetime_add(datetime_trunc(current_datetime, hour), interval 1 hour) and
order_date < datetime_trunc(current_datetime, hour)
为了记录,year()
不是标准的SQL,尽管它在许多数据库中都可用。标准函数为extract()
:extract(year from <val>)
。