我需要一个查询,选择时间小于或等于12:00的行 我有类似的想法:
SELECT daterow FROM datecolumn WHERE daterow <= TO_DATE('12:00, HH24:MI')
但是我收到错误:
ORA-01843: not a valid month
我如何才能获得时间少于中午12点的所有行?
答案 0 :(得分:1)
试试这个,
SELECT daterow FROM datecolumn WHERE daterow <= TO_DATE('12:00', 'HH24:MI');
答案 1 :(得分:1)
为了选择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
答案 2 :(得分:1)
抱歉,<= TO_DATE('12:00', 'HH24:MI')
不起作用。它不从每个日期提取小时和分钟,并将其与12:00进行比较。相反,它构建了当前月份fisrt上的高中午日期,并将每个日期与此日期进行比较。
如果您想从日期中提取某些内容,请使用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
方法不起作用。
答案 3 :(得分:1)
试试这个:
SELECT daterow FROM datecolumn
WHERE TO_DATE(daterow,'HH24:MI') <= TO_DATE('12:00', 'HH24:MI');