Sql 如何在bigquery中找到我的两个日期列之间的工作日数?

Sql 如何在bigquery中找到我的两个日期列之间的工作日数?,sql,datetime,count,google-bigquery,subquery,Sql,Datetime,Count,Google Bigquery,Subquery,这似乎很简单,但我无法在线找到解决方案(不使用函数)。。我正在使用bigquery,希望找到两天之间的工作日数 df['business_days'] = np.busday_count(date1, date2) df['number_weekenddays'] = np.busday_count(date1, date2,

这似乎很简单,但我无法在线找到解决方案(不使用函数)。。我正在使用bigquery,希望找到两天之间的工作日数

df['business_days'] = np.busday_count(date1,
                                     date2)
df['number_weekenddays'] = np.busday_count(date1,
                                      date2,
                                      weekmask='Sat Sun')
我试图用python将上述查询复制到bigquery语法中。我该怎么做?我试过:

select
  order_date,
  pickup_date,
  case 
    when date_diff(pickup_date, order_date, week) > 0 
      then date_diff(pickup_date, order_date, day) - (date_diff(pickup_date, order_date, week) * 2)
    else
      date_diff(pickup_date, order_date, day) 
  end
from `orders.table` 
但我得到了以下错误:

参数类型的函数DATE\u DIFF没有匹配的签名:DATETIME、DATETIME、DATE\u TIME\u PART。支持的签名:DATE_DIFF(日期、日期、日期时间部分)位于[186:10],了解有关BigQuery SQL函数的更多信息


尽管所讨论的日期列是日期,但最简单的方法可能是枚举两个日期之间的天数,并过滤掉非营业日
generate\u date\u array()

select o.order_date, o.pickup_date, 
    (
        select count(*)
        from unnest(generate_date_array(date(o.order_date), date(o.pickup_date))) dt
        where dateofweek(dt) between 2 and 6
    ) cnt_business_days
from `orders.table` o

可能最简单的方法是枚举两个日期之间的天数,并过滤掉非营业日
generate\u date\u array()

select o.order_date, o.pickup_date, 
    (
        select count(*)
        from unnest(generate_date_array(date(o.order_date), date(o.pickup_date))) dt
        where dateofweek(dt) between 2 and 6
    ) cnt_business_days
from `orders.table` o

下面是BigQuery标准SQL

#standardSQL
select order_date, pickup_date,
  (select count(1) from all_days.day 
    where not extract(dayofweek from day) in (1, 7)
  ) as number_of_business_days
from `orders.table` t, 
unnest([struct(generate_date_array(order_date, pickup_date) as day)]) all_days  
如果要运行一些虚拟数据-输出如下


下面是BigQuery标准SQL

#standardSQL
select order_date, pickup_date,
  (select count(1) from all_days.day 
    where not extract(dayofweek from day) in (1, 7)
  ) as number_of_business_days
from `orders.table` t, 
unnest([struct(generate_date_array(order_date, pickup_date) as day)]) all_days  
如果要运行一些虚拟数据-输出如下


因此,如果我想要周末的数量,它将是1和7?@Maths12:如果你想要周末的计数,你将
dateofweek(dt)在2和6之间更改
,在(1,7)中使用
dateofweek(dt)
谢谢,你也知道我如何将“我的日期”列转换为秒吗?@Maths12:我不知道这和你原来的问题有什么关系。。。但是你可以使用例如,所以如果我想要周末的数量,它应该是1和7?@Maths12:如果你想要周末天数的计数,你可以使用(1,7)中的
dateofweek(dt)将
dateofweek(dt)在2和6之间更改
,你也知道我如何将“我的日期”列转换为秒吗?@Maths12:我不知道这和你原来的问题有什么关系。。。但你可以使用例如