将公式的结果设置为工作日

时间:2017-03-14 18:58:09

标签: sql

我想将SQL语句公式的结果更改为1,2,3,4或5(这些是工作日)。

  • 示例1:当我有第1天,第2天时,结果应为4。
  • 示例2:当我有第4天,加上2天时,结果应为1。
  • 例3:当我有第5天,第20天时,结果应为5

目前我正在使用如下所示的表格(我有输入和天后退,输出是我想看到的):

Input,        days-back,        output:
1             0                  1

Input,        days-back,        output:
1             1                  5

Input,        days-back,        output:
1             2                  4

Input,        days-back,        output:
2             4                  3

P.S。我没有约会,只有一天的数字。

我希望你能理解我在寻找的东西:)

1 个答案:

答案 0 :(得分:2)

如果您希望“天后”大于5,则需要使用以下公式:

((Input + ((5*days-back)-1) - days-back) % 5) + 1
  

这是如何工作的 - 如果你看一下之前的公式,你可以看到我在输入中添加了5,以确保在减去一个和几天前我们总是积极的。然后我按5修改并添加一个,这样我们从1到5而不是0到4

     

由于我不知道天后会有多大,我需要更大的东西,但我也需要让它不影响mod 5的计算,所以我只是将它乘以5.然后减去一个(所以我可以稍后添加它,并将0到4到1到5),我们就完成了。

以下答案

我注意到我错过了5个案例 - 这是适用于此的公式:

((Input + 4 - days-back) % 5) + 1

原始回答

您需要使用modulus math。你想要的公式是

(Input + 5 - days-back) % 5

其中%表示模数。在SQL Server中,您可以在Oracle中使用% MOD等等 - 它取决于平台。

对于那些关心的人是我的DB2测试代码:

WITH TEST_TABLE(input, days_back) AS
(
  VALUES
    (1,0),
    (1,1),
    (1,2),
    (2,4)
)
SELECT TEST_TABLE.*
       MOD(INPUT+4-DAYS_BACK,5)+1
FROM TEST_TABLE