我以 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
。
最佳答案
日期(存储在表中)由 7 bytes 表示- 他们没有任何与之关联的格式。如果它们被格式化为字符串,那么这是您用来访问数据库的客户端程序,将其自己的格式应用于日期(您通常可以通过该程序中的首选项进行设置)。
如果“日期”以某种格式存储,则您不会将其存储为日期,而是将其存储为字符串(即 VARCHAR2
)格式。
DATETOSTRING
不是 Oracle 函数 - TO_CHAR( datevalue, format_model, nlsparams )
是一个 Oracle 函数。
I retrieved date from one table in a mm/dd/yyyy hh24:mi:ss format. Now I want to store it in another table in a dd-mon-rr format.
不,如果您检索到 DATE
,那么您从数据库中获得了 7 个字节 - 您正在使用的用户界面(即 SQL/Plus、SQL Developer、Java 等)执行了隐式转换以让您(用户)在显示时能够理解这些 7 字节。
SQL/Plus 和 SQL 开发人员将使用 NLS_DATE_FORMAT
、NLS_DATE_LANGUAGE
和 NLS_TERRITORY
session 参数作为默认格式模型和 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
关于database - Oracle 中是否有任何隐式日期格式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46483529/