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

Sql 将公式的结果设置为工作日,sql,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,

我想将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
另外,我没有日期,只有日期


我希望您理解我的要求:

如果您希望返回的天数大于5天,则需要使用以下公式:

((Input + ((5*days-back)-1) - days-back) % 5) + 1
这是如何工作的——如果你看一下前面的公式,你会发现我在输入中加了5,以确保在减去1和前几天之前,我们总是正值。然后我修改了5,再加上1,这样我们从1到5,而不是从0到4

因为我不知道前几天会有多大,我需要一些更大的东西,但我也需要它不影响mod 5的计算,所以我只需要将它乘以5。然后我减去一,这样我可以稍后再加上它,偏移0到4到1到5,我们就完成了

以下是先前的答复

我注意到我错过了5个案例-以下是适用于这一情况的公式:

((Input + 4 - days-back) % 5) + 1
原始答案

你需要使用。你想要的公式是

(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

如果希望返回的天数大于5天,则需要使用以下公式:

((Input + ((5*days-back)-1) - days-back) % 5) + 1
这是如何工作的——如果你看一下前面的公式,你会发现我在输入中加了5,以确保在减去1和前几天之前,我们总是正值。然后我修改了5,再加上1,这样我们从1到5,而不是从0到4

因为我不知道前几天会有多大,我需要一些更大的东西,但我也需要它不影响mod 5的计算,所以我只需要将它乘以5。然后我减去一,这样我可以稍后再加上它,偏移0到4到1到5,我们就完成了

以下是先前的答复

我注意到我错过了5个案例-以下是适用于这一情况的公式:

((Input + 4 - days-back) % 5) + 1
原始答案

你需要使用。你想要的公式是

(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

能够确定OP的问题的加号1。经过多次阅读,我仍然不知道他在找什么。然而,如果输出5不是一个打字错误,我就添加了一些逻辑来陷阱ZeroHogan亲爱的Hogan,令人惊讶的是,你的反应如此之快,并给出了正确的答案,但是它需要一些调整。结果不能为0或负,应为1、2、3、4或5。我使用以下语句进行测试:创建表test\u inputLosdag varchar255,Transporttijd varchar255插入到test\u input Losdag,Transporttijd值1,0,1,1,1,1,2,1,3,1,4,1,1,5,1,6,1,7,1,20,1,40 SELECT*,Losdag+5-Transporttijd%5从test\u input下拉表test\u inputI对许多编辑表示抱歉,我试图得到正确的布局,但它没有工作,我会看看如何在一分钟内。上面代码中的列有不同的标题:input=losdag,days back=transporttijd,输出为laaddag。结果仅在第2行1,1处不正确?输出应为5,第6行1,6?输出应该是5,最后三个的结果应该是1,7,4,1,20,1和1,40?1.您为5个案例编辑的公式以完美开始,但以1,6、,?is显示的是0而不是5,并且是1,7,?它显示的是-1而不是4。@TruckTruck-我知道你做了什么,你有超过5天的时间。好的,我将提出一个新的公式,谢谢你们的帮助,这有助于我理解这个问题和未来的问题!能够确定OP的问题的加号1。经过多次阅读,我仍然不知道他在找什么。然而,如果输出5不是一个打字错误,我就添加了一些逻辑来陷阱ZeroHogan亲爱的Hogan,令人惊讶的是,你的反应如此之快,并给出了正确的答案,但是它需要一些调整。结果不能为0或负,应为1、2、3、4或5。我使用以下语句进行测试:创建表test\u inputLosdag varchar255,Transporttijd varchar255插入到test\u input Losdag,Transporttijd值1,0,1,1,1,1,2,1,3,1,4,1,1,5,1,6,1,7,1,20,1,40 SELECT*,Losdag+5-Transporttijd%5从test\u input下拉表test\u inputI对许多编辑表示抱歉,我试图得到正确的布局,但它没有工作,我会看看如何在一分钟内。上面代码中的列有不同的标题:input=losdag,days back=transporttijd,输出为laaddag。结果仅在第2行1,1处不正确?输出应为5,第6行1,6?产出应该是5,最后三个的结果应该是b
e 1,7,4,1,20,1和1,40?1.您为5个案例编辑的公式以完美开始,但以1,6、,?is显示的是0而不是5,并且是1,7,?它显示的是-1而不是4。@TruckTruck-我知道你做了什么,你有超过5天的时间。好的,我将提出一个新的公式,谢谢你们的帮助,这有助于我理解这个问题和未来的问题!您使用的是哪种数据库管理系统?博士后?Oracle?您使用的是哪种数据库管理系统?博士后?神谕