【问题标题】:Date format in where clause-Oraclewhere子句中的日期格式-Oracle
【发布时间】:2016-09-07 22:04:26
【问题描述】:

我有一张表,其中日期列包含以下格式的数据: “7/25/2014 12:14:27 AM'。我需要通过放入 where 子句来获取这个日期。谁能建议我该怎么做?

【问题讨论】:

  • 日期列没有格式;它是日期还是 varchar 列?

标签: oracle where-clause date-format


【解决方案1】:

日期(存储在表格中)为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'

【讨论】:

  • 嗨,谷歌搜索后得到了答案,下面的查询运行良好: where TO_CHAR(RECORD_UPDATE_DT, 'MM/DD/YYYY') = '05/12/2016' 感谢您抽出宝贵时间。跨度>
  • @HemantSingh 虽然它可以工作,但它也会忽略列上的任何索引(除非您在 TO_CHAR(RECORD_UPDATE_DT, 'MM/DD/YYYY') 上有基于函数的索引),因此性能会降低。最好将右侧(即文字值)转换为日期。
【解决方案2】:

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

【讨论】:

  • 嗨,谷歌搜索后得到了答案,下面的查询运行良好:其中 TO_CHAR(RECORD_UPDATE_DT, 'MM/DD/YYYY') = '05/12/2016'。感谢您的宝贵时间。
  • 如果您的日期列有索引,您的查询将无法使用它,因为您与从日期列派生的值进行比较。如果您想使用索引,请查看 MT0 或我的答案。
猜你喜欢
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2011-05-04
  • 2018-04-24
相关资源
最近更新 更多