1

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

4

2 回答 2

2

日期存储为 7 个字节:

  1. 世纪 + 100
  2. 年 + 100
  3. 一个月中的哪一天
  4. 小时 + 1
  5. 分钟 + 1
  6. 第二 + 1

世纪和年份都有偏移量 (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. 如果日期取决于时区怎么办?

还有很多。

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

于 2012-11-01T05:15:52.890 回答
2

您不应该以不同的格式插入它,而是在您要使用它时重新格式化日期

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

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

于 2012-11-01T04:42:10.820 回答