我正在使用时间戳来存储日期和时间,但是当我从表中获取行时,我会在时间戳字段中获得大量的零。
SQL> select * from booking_session;
BK_ID|BK_DATE
----------|-------------------------
1|18-MAR-12 10.00.00.000000
2|18-MAR-12 10.25.00.000000
3|18-MAR-12 10.30.00.000000
4|18-MAR-12 10.35.00.000000
5|18-MAR-12 10.40.00.000000
以下是插入声明
插入预订价值(1,TO_TIMESTAMP(' 18/03/2012 10:00', ' DD / MM / YYYY HH24:MI')
有人可以告诉我如何将bk_date格式存储为18-MAR-12 10.00
,或至少将AM或PM放在旁边。
提前致谢。
答案 0 :(得分:4)
您可以将BK_DATE
列声明为timestamp(precision)
,其中precision是存储小数秒的小数位数。所以你可能已经声明了BK_DATE timestamp(0)
。如果您不需要跟踪时间,只需使用date
数据类型来存储日期。在任何情况下,时间部分(hh:mi:ss)将在那里,如果你像往常一样插入数据,只指定小时和分钟,那么秒将用零填充。您可以使用to_char
函数和相应的日期格式掩码在显示时删除那些尾随的零:
-- sample of data
SQL> with t1(BK_ID, BK_DATE) as(
2 select 1, to_timestamp('18-MAR-12 10.00.00.000000', 'DD-MON-RR HH:MI:SSxFF6') from dual union all
3 select 2, to_timestamp('18-MAR-12 10.25.00.000000', 'DD-MON-RR HH:MI:SSxFF6') from dual union all
4 select 3, to_timestamp('18-MAR-12 10.30.00.000000', 'DD-MON-RR HH:MI:SSxFF6') from dual union all
5 select 4, to_timestamp('18-MAR-12 10.35.00.000000', 'DD-MON-RR HH:MI:SSxFF6') from dual union all
6 select 5, to_timestamp('18-MAR-12 10.40.00.000000', 'DD-MON-RR HH:MI:SSxFF6') from dual
7 )
8 select bk_id
9 , to_char(bk_date, 'DD-MON-RR HH:MI') bk_date
10 from t1
11 ;
BK_ID BK_DATE
---------- ------------------------
1 18-MAR-12 10:00
2 18-MAR-12 10:25
3 18-MAR-12 10:30
4 18-MAR-12 10:35
5 18-MAR-12 10:40
答案 1 :(得分:1)
尝试以下查询:
select * from booking_session where trunc(bk_date) = to_date('18-03-2012', 'dd-mm-yyyy');