我以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
。
答案 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_FORMAT
,NLS_DATE_LANGUAGE
和NLS_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';
所有日期都将以此格式显示,这并不意味着如果您插入表格,日期将以此格式存储,日期仍为数字。