3

我需要一个查询来选择时间小于或等于 12:00 的行我有这样的想法:

SELECT daterow FROM datecolumn WHERE daterow <= TO_DATE('12:00, HH24:MI')

但是我得到一个错误:

ORA-01843: not a valid month

我将如何获取所有时间少于中午 12:00 的行?

4

4 回答 4

2

尝试这个,

SELECT daterow FROM datecolumn WHERE daterow <= TO_DATE('12:00', 'HH24:MI');
于 2013-08-26T06:36:44.283 回答
2

尝试这个:

    SELECT daterow FROM datecolumn
 WHERE TO_DATE(daterow,'HH24:MI') <= TO_DATE('12:00', 'HH24:MI');
于 2013-08-26T08:30:59.363 回答
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
于 2013-08-26T07:12:20.443 回答
1

对不起,但<= 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方法不起作用。

于 2013-08-26T08:12:37.090 回答