有什么隐含的日期格式转换在Oracle中?

有什么隐含的日期格式转换在Oracle中?

问题描述:

我以mm/dd/yyyy hh24:mi:ss格式从一张表中检索日期。现在我想以dd-mon-rr格式将它存储在另一个表格中。有什么隐含的日期格式转换在Oracle中?

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

查询使用:

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

insert into efg values(r_date); 

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

+0

HTTPS:/ /*.com/questions/7606745/how-to-change-the-date-format-from-mm-dd-yyyy-to-yyyy-mm-dd-in-pl-sql – fab

+0

'ORA-00904:“DATETOSTRING “:无效标识符” – MT0

+1

dat e是日期,所以将它作为日期存储。日期在内部作为数字格式处理。这允许你用它进行简单的计算,比较它,对它进行排序......当你格式化它时,它是一个固定的字符串,缺少大多数这些功能,并且需要更多的空间。所以不要存储格式化的日期。格式仅用于显示。 – GolezTrol

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

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

你所有的日期将被显示在此格式,这并不意味着日期将被存储在该格式,如果你插入一个表格,日期仍然会一个号码。

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

如果“日期”以格式存储,则不会将其存储为日期,而是将其存储为字符串(即VARCHAR2)格式。

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

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

没有,如果你检索一个DATE然后你从数据库7字节 - 用户界面(即SQL /此外,SQL开发,Java等),你正在使用进行的隐式转换,使这些用户在显示时可以理解7个字节。

SQL/Plus和SQL Developer将使用NLS_DATE_FORMATNLS_DATE_LANGUAGENLS_TERRITORY会话参数设置为默认格式模型和NLS参数的TO_CHAR函数来执行这个隐式转换 - 但这些都是每个用户设置,不应被依赖在多个用户之间保持一致(特别是在国际环境中)。

如果你想存储DATE那么它NO格式 - 如果你再要与特定的格式来显示它,那么你需要将它从DATE使用TO_CHAR成你想要的格式的模型转换为字符串。

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

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

INSERT INTO efg (r_date) 
    SELECT r_date FROM abc; 

来获得日期在你想要的格式:

SELECT TO_CHAR(r_date, 'dd-mon-rr') AS r_date 
FROM efg 
+0

其实问题不是那么简单,从一个表格传输日期到表格。简而言之,我想将从一个数据库检索到的r_date(一个以给定日期格式的字符串)存储到dd-mon-rr中的另一个数据库中当前格式)。 –

+0

@PragatiGupta不**执行此操作 - 将值存储为'DATE',然后在查询数据库时根据需要对其进行格式化。如果需要的话,创建一个具有格式化值的虚拟列,或者为了加快速度,在格式化的日期中添加一个基于函数的索引,但将基础值存储为'DATE'数据类型。 – MT0

+0

如何通过java实现这个功能?我可以使用SimpleDateFormat吗? –