2016-02-14 142 views
-2

我一直在想 - 我的系统上有很多与sysdate一起使用,并且在将它与我的日期列进行比较时,我必须使用trunc(sysdate),因为sysdate的格式为DD/MM/YYYY HH24:MI:SSOracle - 获取当前日期格式

我看着在互联网上的其他功能回到上DD/MM/YYYY格式当前日期,但没有运气,current_date , current_timestamp和ETC也给了我个小时格式..

我需要这个性能更佳的索引时日期列到当前日期。

那么,有谁知道一个系统函数返回所需的格式?或者一种绕过它的方式?

+1

如果你总是使用'trunc()',那么你为什么不只是索引“trunc'ed”值呢? –

+0

我总是在sysdate上使用trunc,而不是在列上,列值已经被截断了。 @a_horse_with_no_name – sagi

+2

那么性能问题是什么? –

回答

-1

您可以更改变量NLS_DATE_FORMAT。

ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY'; 

http://www.dba-oracle.com/t_nls_date_format.htm

+0

不会这样做,我不是直接使用oracle,所以它不会帮助我改变会话(通过informatica使用) – sagi

+1

只会改变_display_格式(或者为恶意隐式数据类型转换假定的格式)。它不会**从实际日期值中删除时间部分。 –

2

看看你的“日期”一栏为DATE类型的,那么你就不需要用“格式”有关。您需要将trunc(column_name)与trunc(sysdate)进行比较。如果由于使用某个函数而导致使用该索引而导致严重的性能问题,则创建一个基于函数的索引。一个不太雅致的解决办法是

WHERE mydatecol> TRUNC(SYSDATE) 和mydatecol < TRUNC(SYSDATE +1)

你不想要做的就是迷惑日的二元概念与字符串表示一个日期。字符串只是一个字符串,作为人们可以识别的数据,但对计算机来说,'2016-02-14'没有'hereisyoursign'的意思。