SELECT TO_TIMESTAMP('2016-10-01 01:00:01', 'YYYY-MM-DD HH24:MI:SS') from dual;
给予:2016-10-01 01:00:01
此处year
和month
部分可供我理解,但Documentation说明了其他格式:
"DD" - Day of month (1-31)
"HH24" - Hour of day (0-23)
"MI" - Minute (0-59)
"SS" - Second (0-59)
那么,为什么例如“DD”格式返回01
而不只是:1
?
例如“MM”格式,在同一文档中描述为:
MM - Month (01-12; January = 01)
并且清楚地显示了一切:1月= 01 。
此外,有点令人困惑的是时间部分(至少对我而言),因为在文档中,所有内容的范围都以0
开头,但返回结果为00
我从上面的查询中得到了预期,结果如下:
2016-10-1 1:0:1
我错过了什么并且没有正确理解?
答案 0 :(得分:1)
首先,您传递两个字符串:要转换为timestamp数据类型的实际日期时间(或时间戳)以及格式模型。然后你调用to_timestamp()
,结果是一个时间戳。然后你在屏幕上显示它(通过SQLPlus或SQL Developer或其他)。只有字符串才能显示在屏幕上 - 而不是数字,而不是时间戳等。所以:某处,某种程度上,你的时间戳被转换回字符串。
您可以通过在时间戳周围调用to_char(.....)
来明确地执行此操作,或者如果不这样做,则接口应用程序(SQLPlus,SQL Developer,...)将使用会话的NLS_TIMESTAMP_FORMAT
参数。在该参数中,您可以强制使用所需的任何格式模型。特别是,您可以使用FM
格式模型修饰符来抑制前导零。
在不更改NLS_TIMESTAMP_FORMAT
的情况下,您可以在查询中使用to_char()
查看相同的效果。试试这个:
select to_char(to_date('01-Feb-12', 'dd-Mon-yy'), 'FMdd/mm/yyyy hh24:mi:ss') from dual;
输出:1/2/2012 0:0:0