我在下面有一个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')
)
)
)
Shift有2种类型:
Night
Morning
现在我希望检测到oracle查询,如果系统时间从08:00
到19:29
然后设置为早晨,那么晚上。
表示我想要WHERE SHIFT = 'system time condition from
08:00 until
19:29 then set shift to be Morning, else Night'
有可能吗?
答案 0 :(得分:1)
此查询使用'sssss'
日期掩码,该掩码是午夜过后的秒数。然后你可以判断时间元素是否在你想要的范围内。
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 - 这取决于你追踪时间的准确程度。
答案 1 :(得分:0)
我认为你可以像这样工作:
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
答案 2 :(得分:0)
最简单的方法是编写函数返回日/夜班并将其包含在您的查询中
python fileName.py -file fileName.txt