从SYSDATE格式化年份值

时间:2014-01-22 16:11:45

标签: sql oracle

我想将当前日期插入到我的表的一列中。我使用以下内容:

to_date(SYSDATE, 'yyyy-mm-dd'));

这很有效,但它将年份显示为'0014'。有什么方法可以让这一年显示为'2014'?

4 个答案:

答案 0 :(得分:3)

将其插入TRUNC(sysdate)即可。 Date实际上没有内部格式,因为它是DataType本身。 TRUNC()实际上只会调整当前日期时间中的时间元素,并返回今天的日期,时间为00:00:00

解释你案件中发生的事情。

说你的NLS_DATE_FORMAT="YY-MM-DD"

处理将如下所示

select  to_date(to_char(sysdate,'YY-MM-DD'),'YYYY-MM-DD') from  dual;

<强>输出:

TO_DATE(TO_CHAR(SYSDATE,'YY-MM-DD'),'YYYY-MM-DD')

January, 22 0014 00:00:00+0000 


2014 - 在第一个'14'中缩小为to_char(),之后再次转换为YYYY ..它将被视为当前0014世纪的细节是最后的!

答案 1 :(得分:2)

to_date函数将字符串转换为日期。 SYSDATE已经是一个日期,所以这将是首先使用NLS设置指定的会话日期格式将SYSDATE转换为字符串,然后使用指定的日期格式将该字符串转换回日期(yyyy-mm- DD)。这可能会也可能不会给出正确的结果,具体取决于会话的NLS日期设置。

简单而正确的解决方案是从此跳过to_date并直接使用SYSDATE。

答案 2 :(得分:2)

to_date用于将字符串转换为日期...尝试使用to_char(SYSDATE,'yyyy-mm-dd')将日期转换为字符串。

答案 3 :(得分:-6)

试试这个to_date(SYSDATE,'dd-mm-yy')