对日期时间格式有点误解
Little bit misunderstanding with datetime formats
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" 格式 returns 01
而不仅仅是:1
?
例如 "MM" 格式,在同一文档中描述为:
MM - Month (01-12; January = 01)
这里一切都清楚:January = 01 .
此外,时间部分有点令人困惑(至少对我而言),因为在文档中,所有范围都以 0
开头,但 returns 结果为 00
我期望从上面的查询中得到这样的结果:
2016-10-1 1:0:1
我错过了什么,没有理解正确?
首先,您传入两个字符串:要转换为时间戳数据类型的实际日期时间(或时间戳),以及格式模型。然后你调用 to_timestamp()
,结果是一个时间戳。然后你在屏幕上显示它(通过 SQLPlus 或 SQL Developer 或其他)。只能在屏幕上显示字符串 - 不能显示数字,不能显示时间戳等。因此:在某处,以某种方式,您的时间戳被转换回字符串。
您可以通过在时间戳周围调用 to_char(.....)
明确地执行此操作,或者如果您不这样做,则界面应用程序(SQLPlus、SQL 开发人员、... ) 使用您会话的 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
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" 格式 returns 01
而不仅仅是:1
?
例如 "MM" 格式,在同一文档中描述为:
MM - Month (01-12; January = 01)
这里一切都清楚:January = 01 .
此外,时间部分有点令人困惑(至少对我而言),因为在文档中,所有范围都以 0
开头,但 returns 结果为 00
我期望从上面的查询中得到这样的结果:
2016-10-1 1:0:1
我错过了什么,没有理解正确?
首先,您传入两个字符串:要转换为时间戳数据类型的实际日期时间(或时间戳),以及格式模型。然后你调用 to_timestamp()
,结果是一个时间戳。然后你在屏幕上显示它(通过 SQLPlus 或 SQL Developer 或其他)。只能在屏幕上显示字符串 - 不能显示数字,不能显示时间戳等。因此:在某处,以某种方式,您的时间戳被转换回字符串。
您可以通过在时间戳周围调用 to_char(.....)
明确地执行此操作,或者如果您不这样做,则界面应用程序(SQLPlus、SQL 开发人员、... ) 使用您会话的 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