Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于系统时间的ORACLE查询位置条件_Oracle - Fatal编程技术网

基于系统时间的ORACLE查询位置条件

基于系统时间的ORACLE查询位置条件,oracle,Oracle,我在下面有一个Oracle查询: select ltrim(ROUND((1-n/c)*100) || '%') as TOTAL from (select count(*) c from WA_SEW_TBL_EMP_INFO WHERE SHIFT = 'Morning') , (SELECT COUNT(*) n FROM (SELECT S.BADGEID_FK FROM WA_SEW_TBL_EMP_

我在下面有一个Oracle查询:

select ltrim(ROUND((1-n/c)*100) || '%') as TOTAL
from (select count(*) c 
      from WA_SEW_TBL_EMP_INFO 
      WHERE SHIFT = 'Morning')
     , (SELECT COUNT(*) n 
        FROM (SELECT S.BADGEID_FK 
              FROM WA_SEW_TBL_EMP_INFO S
              , WA_GA_TBL_EMPLOYEES E 
              WHERE S.BADGEID_FK = E.BADGEID 
              AND S.STATUS = 'Attend' 
              AND S.SHIFT = 'Morning' 
              AND S.BADGEID_FK NOT IN ( SELECT EMPID 
                                        FROM WA_SEW_TBL_RESULTS 
                                         WHERE SYSTEM_DATE between to_date ('2017-08-31 07:00', 'YYYY-MM-DD HH24:MI') 
                                                           and to_date ('2017-08-31 19:29', 'YYYY-MM-DD HH24:MI')
                                         )
            )
    )
班次有两种类型:

Night
Morning
现在,我希望oracle查询检测系统时间是否从08:00到19:29,然后将班次设置为早晨,否则设置为晚上

意思是我想要其中的班次='系统时间条件从08:00到19:29,然后将班次设置为早晨,否则设置为晚上'


有可能做到吗?

我想你可以这样工作:

WITH TEST_DATETIME AS(
      SELECT TO_DATE('2017/08/31 10:15:24','YYYY/MM/DD HH24:MI:SS') DT FROM DUAL
      UNION ALL
      SELECT TO_DATE('2017/08/31 19:40:24','YYYY/MM/DD HH24:MI:SS') FROM DUAL
      UNION ALL 
      SELECT SYSDATE FROM DUAL
)
SELECT CASE WHEN to_char(DT, 'hh24:mi:ss') > '08:00:00' AND to_char(DT, 'hh24:mi:ss') < '19:29:00'  THEN 'Morning' ELSE 'Night' END AS NOON
FROM TEST_DATETIME

最简单的方法是编写返回日班/夜班的函数,并将其包含在查询中

create or replace function find_shift(dat in date) return varchar2
is 
dat2 date;

treshhold1 date; 
treshhold2 date; 
ret varchar2(10);
begin 
dat2:=to_date(to_char(dat, 'HH24:MI'),'HH24:MI');
treshhold1 := to_date('08:00','HH24:MI'); 
treshhold2 := to_date('19:29','HH24:MI'); 
if dat2>=treshhold1 and dat2<= treshhold2 then 
ret := 'Morning'; 
else 
ret := 'Night'; 
end if; 
return ret 
end;
此查询使用“SSS”日期掩码,它是午夜后的秒数。然后,您可以判断时间元素是否在所需的范围内

SELECT EMPID, 
       case when to_number(to_char(system_date, 'sssss')) 
            between 28800 -- 08:00:00
            and 70140 -- 19:29:00
            then 'Morning'
       else 'Night' as SHIFT
FROM WA_SEW_TBL_RESULTS 
where trunc(system_date) = date '2017-08-31'
根据需要将此子查询插入主查询

顺便提一下,我已经按照您指定的19:29:00以秒为界关闭了日期范围。也许这应该是70199,把白班调到19:29:59——这取决于你跟踪时间的精确程度