Oracle CASE下一个工作日

时间:2019-01-11 11:03:20

标签: sql oracle

我想在Oracle查询中计算下一个工作日。因此,周一至周四应为sysdate+1,周五应为sysdate+3,周六应为sysdate+2,周日应为sysdate+1

我想动态地做到这一点,而不是在不同的日子里有很多where语句。

where order_date = CASE WHEN (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) < 5 
  THEN TRUNC (SYSDATE) + 1 
  ELSE TRUNC (SYSDATE + 4), 'IW')  
END

我从答案Next business day (Monday - Friday) in Oracle?中发现了这一点,但查询中似乎有错误,我无法解决。

2 个答案:

答案 0 :(得分:1)

您可以使用to_char(sysdate, 'fmday')返回当天的字符串名称:

where order_date =  
  case
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'friday' then trunc(sysdate) + 3
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'saturday' then trunc(sysdate) + 2
    else trunc(sysdate) + 1
  end 

更好:

where order_date = 
  trunc(sysdate) + case
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'friday' then 3
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'saturday' then 2
    else 1
  end 

答案 1 :(得分:0)

要获取语句的结果,请使用以下语句。

for i in range(0,j): #loop to insert date into SQL Server
    source_data = data[i]["_source"]
    keys = ['_source', 'nagios_service', 'nagios_host', 'nagios_author',
            'nagios_severity_label', 'nagios_external_command', '@timestamp']
    for key in keys:
        print source_data.get(key, "Missing key: '%s'" % key)