【问题标题】:Is there any implicit date format conversion In Oracle?Oracle中是否有任何隐式日期格式转换?
【发布时间】:2023-03-29 00:58:02
【问题描述】:

我从一个表格中以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

【问题讨论】:

  • ORA-00904: "DATETOSTRING": invalid identifier
  • 日期就是日期,所以将其存储为日期。日期在内部作为数字格式处理。这使您可以使用它进行简单的计算、比较、排序......当您对其进行格式化时,它是一个缺少大多数这些功能的固定字符串,并且需要更多空间。所以不要存储格式化的日期。格式化仅用于显示。

标签: database oracle date type-conversion


【解决方案1】:

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

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

您的所有日期都将以这种格式显示,这并不意味着如果您将日期插入到表格中,日期将以这种格式存储,日期仍然是数字。

【讨论】:

    【解决方案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_FORMATNLS_DATE_LANGUAGENLS_TERRITORY 会话参数作为默认格式模型和 TO_CHAR 函数的 NLS 参数来执行此隐式转换 - 但这些是 per-用户设置,不应依赖于在多个用户之间保持一致(尤其是在国际环境中)。

    如果您想存储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 数据类型。
    • 如何通过java实现?可以使用SimpleDateFormat吗?
    • @PragatiGupta 这将是一个在 StackOverflow 上搜索答案的好问题;如果您找不到答案,您可以将其作为另一个问题提出。
    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多