将日期值转换为

好吧,所以我想转换日期值以正确格式化我的日期进行比较,但是,将比较该字段时,将“DATE”数据类型转换为char会影响索引吗? 我可以通过执行to_date(tochar())来解决这个问题吗? 任何意见,将不胜感激谢谢!

编辑 - 对不起,缺乏细节....基本上我需要消除我的日期的时间戳,我用了以下,它似乎工作TO_DATE(TO_CHAR,'YYYY-MM-DD'),'YYYY-MM --DD'),请注意,我不知道这是否是好的做法,但至少(或者我认为)现在它将DATE与DATE进行比较,而不是字符串。


如果您正在进行比较,则不应将日期转换为字符串。 你应该与另一个日期进行比较。 否则,Oracle将无法在日期列上使用非基于函数的索引。

总的来说,就是说,你的编码要好得多

WHERE some_indexed_date_column = to_date( :string_bind_variable, 
                                          <<format mask>> )

而不是

WHERE to_char( some_indexed_date_column, 
               <<format mask>> ) = :string_bind_variable

当然,如果你的绑定变量可以是DATE而不是VARCHAR2 ,那更好,因为那样你就不必做任何数据类型转换,而且优化器估计基数的时间也更容易。

如果您试图对日期进行一些操作 - 例如,如果您想比较日期部分而忽略日期的时间部分 - 您可能需要使用基于函数的索引。 例如,如果您想查找今天创建的所有行

WHERE trunc( some_date_column ) = date '2011-11-04'

你可以在日期列上创建一个基于函数的索引

CREATE INDEX idx_trunc_dt
    ON table_name( trunc( some_date_column ) )

或者你可以重写查询来做类似的事情

WHERE some_date_column >= date '2011-11-04'
  AND some_date_column <  date '2011-11-05'

您应该将日期作为日期进行比较,而不是字符串。 如果将日期与字符串进行比较,请将字符串转换为日期进行比较。


国际海事组织,你应该将你的比较值转换为数据库中存储的格式。 否则,您需要在DATE列上创建基于函数的索引以利用索引。 所以,如果输入字符的日期是11/4/2011,那么你可以在where子句中比较它:

SELECT ...
  FROM your_table
 WHERE the_date_column = TO_DATE('11/4/2011','MM/DD/YYYY');
链接地址: http://www.djcxy.com/p/6293.html

上一篇: Converting Date value TO

下一篇: Java: Date from unix timestamp