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