Oracle的默认date格式是YYYY-MM-DD,为什么?

Oracle的默认date格式是YYYY-MM-DD。 这意味着如果我这样做:

select some_date from some_table 

…我失去了约会的时间。

是的,我知道你可以“修复”这个:

  alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 

但是,严重的是, 为什么不是上面的默认? 特别是在一个DBMS中,两个主要的时间跟踪数据types(DATE和TIMESTAMP)都有一个包含(至less)精度低于1秒的时间分量。

如果使用此查询为您的数据仓库生成input文件,则需要适当地格式化数据。 实质上,在这种情况下,您将date(具有时间分量)转换为string。 您需要明确地格式化您的string或更改您的nls_date_format设置默认值。 在你的查询中,你可以简单地做:

 select to_char(some_date, 'yyyy-mm-dd hh24:mi:ss') my_date from some_table; 

您确定您不会将Oracle数据库与Oracle SQL Developer混淆吗?

数据库本身没有date格式,date以原始格式从数据库中出来。 这是由客户端软件来渲染它,而SQL Developer 确实使用YYYY-MM-DD作为默认格式,这是无用的,我同意。

编辑:正如以下评论,SQL Developer可以重新configuration为正确显示DATE值,它只是有不良的默认值。

格式YYYY-MM-DD是ISO8601date (和时间)信息交换标准的一部分。

甲骨文很勇敢地采用这样的ISO标准,但与此同时,奇怪的是他们并没有走到尽头

总的来说,人们抵制任何不同的事情,但是国际上有许多好的理由 。

我知道我说的是革命性的东西,但是我们都应该接受ISO的标准,即使是我们一点一点地做。

Oracle最大的PITA是没有默认的date格式!

在你的Oracle安装中,Locale和安装选项的组合select了(非常明智的!)YYYY-MM-DD作为输出date的格式。 另一个安装可能select了“DD / MM / YYYY”或“YYYY / DD / MM”。

如果你希望你的SQL可以移植到另一个Oracle站点,我build议你总是在每个date列的周围包装一个TO_CHAR(datecol,'YYYY-MM-DD')或类似的函数,或者在连接之后立即设置defualt格式同

 ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; 

或类似的。

依靠默认设置为一个特定的值,恕我直言,是不是明智的,无论是date格式,货币格式,优化模式或其他。 您应该始终在服务器,客户端或应用程序中设置所需的date格式的值。

特别是,为了显示目的,在转换date或数字数据types时不要依赖默认值,因为对数据库的单个更改可能会破坏应用程序。 始终使用明确的转换格式。 多年来,我一直在Oracle系统上工作,那里的默认date显示格式是MM / DD / RR,这使我疯狂,但至less迫使我总是使用显式转换。

这是客户端的一个“问题”,不是真正的Oracle问题。

这是用这种方式格式化和显示date的客户端应用程序。

在你的情况下,这是格式化的SQL * Plus。
其他SQL客户端有其他默认值。

大多数IDE可以为某些数据configuration默认掩码,如date,货币,小数分隔符等。

如果您正在使用Oracle SQL Developer

工具>首选项>数据库> NLS

date格式:YYYY-MM-DD HH24:MI:SS

每个SQL标准的date值是YYYY-MM-DD。 所以即使Oracle存储时间信息,我的猜测是他们以一种与SQL标准兼容的方式显示值。 在标准中,有TIMESTAMP数据types,包括date和时间信息。

我不是甲骨文的用户(最近,不pipe怎么说),但是…

在大多数数据库中(用精确的语言),date不包括时间。 有一个约会并不意味着你在这一天表示具体的第二秒。 一般来说,如果你想要一个时间和一个date,这就是所谓的时间戳。

Oracle具有Date和Timestamp数据types。

根据Oracle文档 ,date和时间戳之间的数据大小有所不同,因此当意图只有date字段时,显示date格式是有意义的。 此外,“它没有小数秒或时区”。 – 所以当需要时间戳信息时,这不是最好的select。

date字段可以很容易地格式化,以显示Oracle SQL Developer中的时间组件 – 在PL / SQL Developer中运行的date查询显示时间,但不显示在Oracle SQL Developer中 。 但它不会显示小数秒或时区 – 为此,您需要Timestamp数据types。

原因:如果您正在查看具有时间戳的数据列,则_MOST_IMPORTANT_信息位是年份。 如果数据已经在数据库十年了,这是很重要的知道。 所以,一年来。

这是有道理的,接下来的一个月,然后是一天,一小时,一分钟。 客观地说,这些是时间数据显示的最合理的顺序。

这也是有道理的,如果你要显示的数据默认情况下,你应该只显示数据的最重要的部分,所以默认情况下,只有YMD。 一切都可以显示,但它不会混乱你的SQL报告默认情况下。

如果您按顺序显示YMD,则按datesorting是合理的。 计算机擅长顺序,看起来合乎逻辑。

最后。 你偏好要MDY是你的偏见。 即使在美国,也不是每个人都使用这种格式。 因此,使用最合乎逻辑的格式,并且在别人决定默认为逻辑时不要激怒。

(我是美国出生的,我不代表甲骨文,但我可以自己想)