如何以特定格式将日期插入到oracle中的表中

时间:2012-11-01 00:39:00

标签: oracle oracle10g

如何以特定格式(例如'yyyy-mm-dd')将日期插入表中,我需要使用select语句检索上述指定格式的日期列的值不应使用to_dateto_char转换。

2 个答案:

答案 0 :(得分:2)

您不应该使用其他格式插入它,而是在您打算使用它时重新格式化日期

SELECT TO_CHAR(date, 'DD/MM/YYYY') AS date FROM table;
// will give: day/month/year

我不明白为什么不使用TO_CHAR只是因为这样做。

答案 1 :(得分:2)

日期存储为7个字节:

  1. Century + 100
  2. 年+ 100
  3. 日期
  4. 小时+ 1
  5. 分钟+ 1
  6. Second + 1
  7. 世纪和年份都有抵消(100)分别允许负世纪和年份(BC日期需要)。并且小时,分钟,秒都有+1,以确保日期本身永远不会包含NULL。我们可以使用dump函数来获取日期的内部表示。

    SQL> create table TB_Date(
      2    dt date
      3  )
      4  ;
    
    Table created
    
    SQL> insert into tb_date(dt) values(sysdate);
    
    1 row inserted
    
    SQL> commit;
    
    Commit complete
    
    SQL> select dump(dt) from tb_date;
    
    DUMP(DT)
    ------------------------------------
    Typ=12 Len=7: 120,112,11,1,9,49,26  
    

    虽然在内存日期中表示略有不同(长度为8个字节)。

    说过你不能以特定格式存储日期(DATE数据类型的数据) - 你可以用特定的格式显示它们。显示日期的默认格式由NLS_DATE_FORMAT参数定义。是的,您可以在varchar2数据类型的列中以特定格式存储日期,但是它非常不鼓励并且有很多缺点:

    1. 额外的计算。每次需要实现日期算术时,都必须使用隐式(不是好主意)或显式(使用to_date函数)数据类型转换。
    2. 如果必须以不同的格式显示“日期”,则必须使用TO_CHAR(TO_DATE())来电。
    3. 如果日期取决于时区怎么办?
    4. 还有更多。

      因此,将日期存储为date数据类型的值,并使用TO_CHAR()函数或NLS_DATE_FORMA T参数以显示日期以所需格式存储。