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

标签 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

最佳答案

日期(存储在表中)由 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_FORMATNLS_DATE_LANGUAGENLS_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/

相关文章:

php - 所选语言和数据库是否有性能提升?

java - JPQL和Native Query执行顺序不同

sql - 0RA-00952 与 Oracle 10g 的内部连接

java - 将 JDBCConnection 转换为 OracleConnection 时出错

MySQL 查询根据日期范围重叠选择不同的行

date - CMake转换日期格式

javascript - Moment.js 中本地化格式的两位数年份格式

mysql - 如何计算 Codeigniter 中的页面浏览量并通过 IP 地址限制计数?

sql - 从/向数据库删除+插入数据

php - MySQL 查询(分层数据)返回错误的节点深度