13

DATE列dを持つテーブルがあります。

日付に関係なく、d列がある値よりも大きい/小さいすべての行を取得したいと思います。

例えば

|       d          |
-------------------
|2009/11/1 15:55:23|
--------------------
|2009/11/2 15:55:23|
--------------------
|2009/11/3 15:55:23|
--------------------
|2009/11/3 17:55:23|
--------------------

たとえば、午後5時以降にすべてのレコードにマークを付けたい場合:

select d 
 from my_table 
where extract( hour from d ) > TO_DATE ('17:00:00','HH24:MI:SS') 

これは1つのレコードのみを返す必要があります

|2009/11/3 17:55:23|

これが最善の方法かどうかはわかりませんが、抽出関数でエラーが発生します。

ORA-30076: invalid extract field for extract source 
Cause: The extract source does not contain the specified extract field.

これを行うためのより良い方法はありますか?そのエラーはどうですか?私が見つけたすべての例のように、sysdateでのみ利用可能な抽出?

前もって感謝します

4

3 に答える 3

15

これはどう?

select d 
from my_table
where to_char(d,'HH24') > '16';
于 2010-02-26T16:31:52.430 に答える
9

現時点でテストする Oracle データベースはありませんが、次のように動作するはずです。

SELECT *
  FROM MY_TABLE t
  WHERE EXTRACT(HOUR FROM CAST(t.D AS TIMESTAMP)) > 16;

しかし、このページでは HOUR が DATE の有効なフィールドであると述べているため、CAST が必要な理由がわかりません。

共有してお楽しみください。

于 2010-02-28T14:20:58.420 に答える
5

これを試して:

select d from my_table 
where (d-trunc(d)) > 16/24; 
于 2010-02-26T16:30:07.327 に答える