我需要選擇行,其中的時間小於或等於12:00 我腦子裏想的是這樣的查詢:選擇日期,時間是小於或等於'12:00' 甲骨文
SELECT daterow FROM datecolumn WHERE daterow <= TO_DATE('12:00, HH24:MI')
但是我得到一個錯誤:
ORA-01843: not a valid month
我怎麼會去得到那有時間小於12:00中旬的一天中的所有行?
我需要選擇行,其中的時間小於或等於12:00 我腦子裏想的是這樣的查詢:選擇日期,時間是小於或等於'12:00' 甲骨文
SELECT daterow FROM datecolumn WHERE daterow <= TO_DATE('12:00, HH24:MI')
但是我得到一個錯誤:
ORA-01843: not a valid month
我怎麼會去得到那有時間小於12:00中旬的一天中的所有行?
爲了選擇所有行daterow
列值的時間部分小於或等於12:00
中午可以使用to_char()
函數提取小時和分鐘和to_number()
將其轉換爲數字進行進一步的比較:
-- sample of data. Just for the sake of demonstration
SQL> with t1(col) as(
2 select sysdate - to_dsinterval('P0DT3H') from dual union all
3 select sysdate - to_dsinterval('P0DT2H') from dual union all
4 select sysdate - to_dsinterval('P0DT1H') from dual union all
5 select sysdate + to_dsinterval('P0DT3H') from dual union all
6 select sysdate + to_dsinterval('-P2DT0H') from dual
7 )
8 select to_char(col, 'dd.mm.yyyy hh24:mi:ss') as res
9 from t1 t
10 where to_number(to_char(col, 'hh24mi')) <= 1200
11 ;
結果:
RES
-------------------
26.08.2013 08:10:59
26.08.2013 09:10:59
26.08.2013 10:10:59
24.08.2013 11:10:59
嘗試此,
SELECT daterow FROM datecolumn WHERE daterow <= TO_DATE('12:00', 'HH24:MI');
對不起,但是<= TO_DATE('12:00', 'HH24:MI')
不起作用。它不會從每個日期提取小時和分鐘,並將其與12:00進行比較。相反,它構造了當前月份的月中高日的日期,並將每個日期與該日期進行比較。
如果你想提取東西從一個日期,使用extract
函數。
注意:在日期上使用提取,並且要提取小時,分鐘或秒時,您首先需要將日期轉換爲時間戳。
例子:
SELECT
extract(hour FROM cast(A AS TIMESTAMP)) AS h,
extract(MINUTE FROM cast(A AS TIMESTAMP)) AS m
FROM
DEMO
;
你可以找到sqlfiddle一個完整的例子。該示例還顯示to_date
方法不起作用。
試試這個:
SELECT daterow FROM datecolumn
WHERE TO_DATE(daterow,'HH24:MI') <= TO_DATE('12:00', 'HH24:MI');
完美無瑕! :b謝謝 – Nicholas