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

Aar*_* Fi 67 oracle date-formatting

Oracle的默认日期格式为YYYY-MM-DD.这意味着如果我这样做:

 select some_date from some_table
Run Code Online (Sandbox Code Playgroud)

......我失去了约会的时间部分.

是的,我知道你可以用以下方式解决这个问题:

 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Run Code Online (Sandbox Code Playgroud)

但说真的,为什么不是上面的默认值?特别是在DBMS中,两个主要时间跟踪数据类型(DATE和TIMESTAMP)具有包括(至少)精度低至1秒的时间分量.

ska*_*man 82

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

数据库本身没有日期格式,日期以原始格式从数据库中出来.由客户端软件来呈现它,并且SQL Developer 确实使用YYYY-MM-DD作为其默认格式,这是无用的,我同意.

编辑:正如下面评论的那样,SQL Developer可以重新配置为正确显示DATE值,它只有错误的默认值.

  • 在SQL Developer中,工具>首选项>数据库> NLS参数...可以设置13个参数来控制默认值. (32认同)
  • 很公平,它可以配置,但为什么downvote?我的观点仍然表明,这是客户端软件的一个方面,而不是数据库,这是问题的关键. (8认同)

Dou*_*ter 54

如果您使用此查询为数据仓库生成输入文件,则需要适当地格式化数据.基本上在这种情况下,您将日期(具有时间组件)转换为字符串.您需要显式格式化字符串或更改nls_date_format以设置默认值.在您的查询中,您可以简单地执行:

select to_char(some_date, 'yyyy-mm-dd hh24:mi:ss') my_date
  from some_table;
Run Code Online (Sandbox Code Playgroud)


pav*_*ium 21

格式YYYY-MM-DD是ISO8601的一部分,用于交换日期(和时间)信息.

采用像这样的ISO标准是非常勇敢的甲骨文,但与此同时,奇怪的是他们没有一路走下去.

一般来说,人们抵制任何不同的东西,但国际上有许多好的理由.

我知道我在说革命性的东西,但我们都应该接受ISO标准,甚至是我们做这一点在同一时间.


Jam*_*son 12

Oracle最大的PITA就是没有默认的日期格式!

在您的Oracle安装中,Locales和安装选项的组合选择了(非常明智的!)YYYY-MM-DD作为输出日期的格式.另一个装置可以选择"DD/MM/YYYY"或"YYYY/DD/MM".

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

ALTER SESSION 
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; 
Run Code Online (Sandbox Code Playgroud)

或类似的.

  • DBA可以在系统范围内设置他们想要的NLS_DATE_FORMAT.但是,数据库通常只返回七字节内部日期格式的值,客户端软件自己将其转换为字符串. (4认同)

Dav*_*dge 9

依赖默认值设置为特定值,恕我直言,无论是日期格式,货币格式,优化模式还是其他任何东西,都是明智之举.您应始终在服务器,客户端或应用程序中设置所需的日期格式的值.

特别是,在转换日期或数字数据类型以进行显示时,永远不要依赖默认值,因为对数据库的单个更改可能会破坏您的应用程序.始终使用显式转换格式.多年来我一直在Oracle系统上工作,其中开箱即用的默认日期显示格式是MM/DD/RR,这让我疯狂,但至少迫使我总是使用显式转换.


Fab*_*ath 7

大多数IDE可以为某种数据配置默认掩码,如日期,货币,小数点分隔符等.

如果您正在使用Oracle SQL Developer:

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

日期格式:YYYY-MM-DD HH24:MI:SS


Har*_*d L 5

根据SQL标准的DATE值为YYYY-MM-DD。因此,即使Oracle存储了时间信息,我的猜测是它们正在以与SQL标准兼容的方式显示值。在标准中,有TIMESTAMP数据类型,其中包括日期和时间信息。


a_h*_*ame 5

这是客户端的"问题",而不是Oracle问题.

它是以这种方式格式化和显示日期的客户端应用程序.

在你的情况下,它是SQL*Plus执行此格式化.
其他SQL客户端具有其他默认值.