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是你的偏见。 即使在美国,也不是每个人都使用这种格式。 因此,使用最合乎逻辑的格式,并且在别人决定默认为逻辑时不要激怒。
(我是美国出生的,我不代表甲骨文,但我可以自己想)