有什么隐含的日期格式转换在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
。
您不以特定格式存储日期,您的日期始终以数字形式存储在数据库中。 显示给您的方式取决于您的特定客户端参数。 对于为例,如果你这样做:
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_FORMAT
,NLS_DATE_LANGUAGE
和NLS_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
其实问题不是那么简单,从一个表格传输日期到表格。简而言之,我想将从一个数据库检索到的r_date(一个以给定日期格式的字符串)存储到dd-mon-rr中的另一个数据库中当前格式)。 –
@PragatiGupta不**执行此操作 - 将值存储为'DATE',然后在查询数据库时根据需要对其进行格式化。如果需要的话,创建一个具有格式化值的虚拟列,或者为了加快速度,在格式化的日期中添加一个基于函数的索引,但将基础值存储为'DATE'数据类型。 – MT0
如何通过java实现这个功能?我可以使用SimpleDateFormat吗? –
HTTPS:/ /stackoverflow.com/questions/7606745/how-to-change-the-date-format-from-mm-dd-yyyy-to-yyyy-mm-dd-in-pl-sql – fab
'ORA-00904:“DATETOSTRING “:无效标识符” – MT0
dat e是日期,所以将它作为日期存储。日期在内部作为数字格式处理。这允许你用它进行简单的计算,比较它,对它进行排序......当你格式化它时,它是一个固定的字符串,缺少大多数这些功能,并且需要更多的空间。所以不要存储格式化的日期。格式仅用于显示。 – GolezTrol