where子句中的日期格式 - Oracle

时间:2016-05-12 07:55:45

标签: oracle where-clause date-format

我有一个表格,其中日期列的格式如下: “7/25/2014 12:14:27 AM'。我需要通过输入where子句来获取此日期。有人可以建议我该怎么做?

2 个答案:

答案 0 :(得分:7)

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

如果“日期”以格式存储,那么您不会将其存储为日期,而是将其存储为字符串(即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'

答案 1 :(得分:3)

您看到的日期格式很可能是您的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');