Oracle where子句中的日期格式



我有一个表,其中日期列的数据格式如下:"2014年7月25日上午12:14:27。我需要通过放入where子句来获取此日期。有人能建议我如何做到这一点吗?

日期(存储在表中)由7个字节表示,它们没有任何相关的格式。如果它们被格式化为字符串,那么这就是您用来访问数据库的客户端程序,它将自己的格式应用于日期(通常可以通过该程序中的首选项进行设置)。

如果"日期"是用一种格式存储的,那么您不是将其存储为日期,而是将其存储成字符串(即VARCHAR2)格式。

查询-如果日期存储为日期

SELECT *
FROM   table_name
WHERE  date_column = TO_DATE( '7/25/2014 12:14:27 AM', 'MM/DD/YYYY HH12:MI:SS AM' )

或者,使用ANSI/ISO文字:

SELECT *
FROM   table_name
WHERE  date_column = TIMESTAMP '2014-07-25 00:14:27'

或者,如果你想要只针对给定一天的值,那么:

SELECT *
FROM   table_name
WHERE  date_column >= DATE '2016-05-12'
AND    date_column <  DATE '2016-05-13'

(这将允许您使用date_column列上的任何索引。)

或者,只传递一个单日值(由绑定变量:date_value表示):

SELECT *
FROM   table_name
WHERE  date_column >= :date_value
AND    date_column <  :date_value + INTERVAL '1' DAY

查询-如果"日期"存储为字符串

SELECT *
FROM   table_name
WHERE  TO_DATE( date_as_a_string_column, 'MM/DD/YYYY HH12:MI:SS AM' )
         = TIMESTAMP '2014-07-25 00:14:27'

或者,简单地说:

SELECT *
FROM   table_name
WHERE  date_as_a_string_column = '7/25/2014 12:14:27 AM'

您看到的日期格式很可能是SQL工具(SQLplus、SQL Developer、Toad等)使用的格式。正确的日期列没有关联的日期格式。

要编写可靠的查询以按日期进行选择,请在查询中明确指定日期格式(否则Oracle将使用当前会话中的日期格式):

SELECT * FROM T1
WHERE DATE_COL > TO_DATE('7/25/2014 12:14:27 AM', 'MM/DD/YYYY HH:MI:SS AM');

任何其他日期格式也可以:

SELECT * FROM T1
WHERE DATE_COL > TO_DATE('2014-07-25 12:14:27', 'YYYY-MM-DD HH24:MI:SS');

最新更新