2013-07-04 25 views

回答

1
SELECT 
    * 
FROM 
    Employee e 
WHERE 
    TO_NUMBER(TO_CHAR(e.DateHired, 'DD')) <= 15 
1

從技術上講,15日不是本月上半月。這可能是第14名。

爲了得到上半年的數據,你需要計算出當月的最大天數,然後除以2,向下或向上(我總是舍入)以獲得當月的天數你需要從中選擇。

然後,您需要將該數字添加到月份的開始,並減去一個月份從第一個月開始。

您還需要限制以確保您正在查看同一月份。

select * 
    from employee 
where trunc(datehired) <= trunc(sysdate, 'mm') 
          + floor(to_number(to_char(last_day(sysdate),'DD'))/2) 
          - 1 
    and trunc(datehired,'mm') = trunc(sysdate, 'mm') 
+0

嗯,這不會返回'datehired'是上個月三十分之一的行嗎? BETWEEN會更有意義,儘管我不相信OP在當前月份感興趣。 – APC