【问题标题】:bigquery subtract 3 business days from datebigquery 从日期减去 3 个工作日
【发布时间】:2018-04-12 11:06:48
【问题描述】:

我知道您可以从日期中减去天数,如下所示:

SELECT DATE_SUB(DATE "2008-12-25", INTERVAL 3 DAY) as three_days_ago;

但是如何减去 3 business 天?

【问题讨论】:

  • 样本数据在哪里?
  • 您使用的是标准 SQL 还是旧版 SQL?
  • 标准 SQL...

标签: sql google-bigquery


【解决方案1】:

您可以尝试使用CASE 表达式

SELECT
    CASE WHEN DAYOFWEEK(date) IN (2, 3, 4)    -- Monday, Tuesday, Wednesday
         THEN DATE_SUB(date, INTERVAL 5 DAY)
         WHEN DAYOFWEEK(date) = 1
         THEN DATE_SUB(date, INTERVAL 4 DAY)
         ELSE DATE_SUB(date, INTERVAL 3 DAY) END AS three_days_ago
FROM yourTable;

对于星期日,我们需要增加一天才能过去星期六,这不能计算在内。同样,对于周一到周三,我们需要增加两天来覆盖整个周末,这不能计算在内。从周四到周六,我们可以只减去 3 天,全部都是工作日。

【讨论】:

【解决方案2】:

试试这个。兄弟,它适用于所有情况。

DECLARE @DATE DATETIME, @DAYS_EXTEND INT, @HOLIDAYS VARCHAR(100) , @COUNTER INT

--ARGUMENTS
SET @DATE = '2018-04-12'
SET @DAYS_EXTEND  = 3
SET @HOLIDAYS  = 'SAT,SUN'   --REQUIRED OFF DAYS LIST COMM SEPERATED
------------------------------------

    SET @COUNTER = @DAYS_EXTEND  
    WHILE @COUNTER > 0 
    BEGIN

        SET @COUNTER = @COUNTER -1
        SET @DATE  = @DATE +1

        IF  @HOLIDAYS  LIKE '%'+LOWER(LEFT(DATENAME(DW,@DATE) ,3))+'%'  
        BEGIN
            SET @DAYS_EXTEND = @DAYS_EXTEND +1
            SET @COUNTER = @COUNTER +1;
        END
    END
    SELECT @DATE AS 'DATE_AFTER_EXTENDED_BUSINESS_DAYS'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多