我用的是oracle8.17,前台用的是PB,为什么我在数据库中写的日期型数据如2005-2-18,用PB程序直接读数据库出来就变成了2005-2-18 00:00:00,后面多出了时间,我只想在数据库中存日期,程序里也只处理日期,为什么会出现这种情况?是oracle自动给日期型数据加的吗?

解决方案 »

  1.   

    2005-2-18 00:00:00 是的Date类型,
    只要日期的话,trunc(2005-2-18 00:00:00,'dd')
      

  2.   

    SQL> select trunc(sysdate,'dd') from dual;TRUNC(SYSDATE,'DD')
    -------------------
    2007-2-1SQL>
      

  3.   

    谢谢,处理一下是可以了,能不能不处理直接在oracle中存日期型的数据如2005-2-18这样的?我不想在我的程序中还去处理日期时间型的数据转换问题。我用的是PB中的一个控件数据窗口,它直接就把oracle中的数据读出来了,我明明在oracle中设置的是date型,可是PB读出来就变成了datetime型了,是不是因为PB中有date和datetime型之分,而oracle中只有一个date类型?
      

  4.   

    select to_char(yourdate,'yyyy-mm-dd') from dual;
      

  5.   

    不处理直接在oracle中存日期型的数据如2005-2-18:
    用to_date(aaa,'yyyy-mm-dd'),掩码'yyyy-mm-dd'格式可任意修改。
      

  6.   

    select to_char(sysdate,'yyyy-mm-dd') from dual;
      

  7.   

    数据库里面修改NLS_DATE_FORMAT可以调整日期显示的格式.NLS_DATE_FORMAT默认的格式里面带有时间部分.
    Oracle也是有date,timestamp两种类型的。不是楼主认为的一种data类型。
    但是楼主的都是00:00:00,这个倒是让我有点奇怪。
    没有用过PB,我反而是认为是不是LZ在PB的什么地方用错了?假如肯定了不是PB那里的问题的话,可以看看下面的做法。
    1.不知道PB可不可以设置一些Oracle环境变量,可以的话,可以设置NLS_DATE_FORMAT。
    2.不可以的话,加入你的所有数据库联接都是共通的话,可以执行alter session set NLS_DATE_FORMAT='yyyy/mm/dd'这样来修改你当前的连接也可以.当然,直接修改数据库的也可以做到,你可以改的话。
      

  8.   

    更正一下上面的说法,
    "NLS_DATE_FORMAT默认的格式里面带有时间部分",这个由各个语种决定.并不是一定有时间部分的.
      

  9.   

    select * from sys.v_$NLS_parameters
    看一下这个系统视图,可以知道是什么的。相关视图还有,
    sys.NLS_database_parameters
    sys.NLS_instance_parameters
    sys.NLS_session_parameters