我没有得到预期的结果。为什么?

时间:2013-09-23 08:02:16

标签: sql timestamp

我的表结构

Name          Null Type         
------------- ---- ------------ 
T_NO               NUMBER       
T_NAME             VARCHAR2(10) 
ENTERING_TIME      TIMESTAMP(6) 
LEAVING_TIME       TIMESTAMP(6) 
TO_DATE            DATE   

插入声明:

insert INTO t3 VALUES
  (
    1,
    'ram',
    TO_date('01:36:51','HH:MI:SSAM'),
    TO_date('11:59:51','HH:MI:SSPM'),
    to_date('23-09-13','dd-mm-yy')
  )

我的问题是:我在LEAVING_TIME中特别提到了PM,但它显示了AM。我不知道它为什么表现出来。

这个选择有问题吗?

select t_no,t_name, TO_CHAR(ENTERING_TIME,'HH12:MI:SSPM'),
TO_CHAR(LEAVING_TIME,'HH12:MI:SSPM'),TO_DATE from t3

结果是:

T_NO|T_NAME|TO_CHAR(ENTERING_TIME,'HH12:MI:SSPM')|TO_CHAR(LEAVING_TIME,'HH12:MI:SSPM')|TO_DATE 
1 ram        09:45:51AM                            04:45:51AM       23-SEP-13
1 ram        10:05:51AM                            11:00:51AM       23-SEP-13
1 ram        01:36:51AM                            11:59:51AM        23-SEP-13 

1 个答案:

答案 0 :(得分:1)

您的查询按预期正常工作。

在您的查询中,

TO_date('11:59:51','HH:MI:SSPM')

您已经提到了格式中的Meridian指标(PM),但您没有在日期字符串中给出它的值。 因此,它默认为AM。

你需要做的就是这样写。

TO_date('11:59:51PM','HH:MI:SSPM').

请注意,'HH:MI:SSPM'只是一种格式说明符。它不表示时间是上午还是下午。您可以使用AM替换PM,但仍可获得相同的结果。