select
如何以特定格式(如“yyyy-mm-dd”)将日期插入表中,并且我需要使用不应该使用to_date
或to_char
转换的语句以上述指定格式检索日期列的值。
问问题
4011 次
2 回答
2
日期存储为 7 个字节:
- 世纪 + 100
- 年 + 100
- 月
- 一个月中的哪一天
- 小时 + 1
- 分钟 + 1
- 第二 + 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
,但非常不鼓励这样做并且有很多缺点:
- 额外的计算。每次您需要实现日期算术时,您都必须使用隐式(不是一个好主意)或显式(使用
to_date
函数)数据类型转换。 - 每次如果“日期”必须以不同的格式显示,您必须使用
TO_CHAR(TO_DATE())
调用。 - 如果日期取决于时区怎么办?
还有很多。
因此,将日期存储为date
数据类型的值,并使用TO_CHAR()
函数或NLS_DATE_FORMA
T 参数以所需格式显示日期。
于 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 回答