在Oracle中是否有任何隐式日期格式转换?

时间:2017-09-29 07:07:17

标签: database oracle date type-conversion

我以mm/dd/yyyy hh24:mi:ss格式从一个表中检索日期。现在我想以dd-mon-rr格式将其存储在另一个表中。

是否会发生任何隐式转换?如果没有,请建议查询!

使用的查询:

select DATETOSTRING(r_date, 'mm/dd/yyyy hh24:mi:ss') as r_date from abc;

insert into efg values(r_date);

注意:数据库的当前日期格式为dd-mon-rr

2 个答案:

答案 0 :(得分:2)

日期(存储在表格中)由7 bytes表示 - 它们没有与之关联的任何格式。如果它们被格式化为字符串,那么这是您用来访问数据库的客户端程序,它将自己的格式应用于日期(通常可以通过该程序中的首选项设置)。

如果"日期"以格式存储,然后您不将其存储为日期,而是将其存储为字符串(即VARCHAR2)格式。

DATETOSTRING不是Oracle函数 - TO_CHAR( datevalue, format_model, nlsparams )是Oracle函数。

  

我从mm / dd / yyyy hh24:mi:ss格式的一个表中检索日期。现在我想以dd-mon-rr格式将它存储在另一个表中。

不,如果您检索到DATE,那么您从数据库中获得7个字节 - 您正在使用的用户界面(即SQL / Plus,SQL Developer,Java等)执行隐式转换用户在显示它时可以理解这7个字节。

SQL / Plus和SQL开发人员将使用NLS_DATE_FORMATNLS_DATE_LANGUAGENLS_TERRITORY会话参数作为默认格式模型,并使用TO_CHAR函数的NLS参数来执行此操作隐式转换 - 但这些是每用户设置,不应依赖于多个用户(特别是在国际环境中)。

如果您想要存储DATE,那么它具有 NO 格式 - 如果您想要以特定格式显示它,那么您需要将其转换为{{1使用DATE和您想要的格式模型的字符串。

所以,你可以简单地使用:

将日期从一个表复制到另一个表:

TO_CHAR

以您想要的格式获取日期:

INSERT INTO efg (r_date)
  SELECT r_date FROM abc;

答案 1 :(得分:1)

您不以特定格式存储日期,您的日期始终存储为数据库中的数字。 它的显示方式取决于您的特定客户端参数。 例如,如果你这样做:

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

所有日期都将以此格式显示,这并不意味着如果您插入表格,日期将以此格式存储,日期仍为数字。