基于系统时间的ORACLE查询位置条件
我在下面有一个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_
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——这取决于你跟踪时间的精确程度