项目中的许多日期,只需要保存到年月日,出于开发的简单(减少to_char、to_date的转换),将日期字段定义为“varchar(10)”,格式为“YYYY-MM-DD”,由于页面中通过了日期控件及日期合法性校验,可以严格的日期输入的正确性。
  项目提交时,受到了客户的质疑,认为不是常规的方式,请问各位的项目中,是否也有用varchar存数日期型的???
varchar存数日期型的优势:
1、读去数据到页面显示时,不需要to_char的转换。
2、页面数据保存到数据库时,也省去了to_date的转换。varchar存数日期型依旧满足:
1、排序:字符串排序(格式固定)
2、区间查找:字符串区间查找(格式固定)
3、计算N日前等操作:to_date转换后即可操作
4、数据合法性检查:页面严格控制(无论是否用varchar均需要控制)

解决方案 »

  1.   

    我有时也用varchar来保存日期,推荐用date,保存时对日期字符串to_date()下,就可以了,使用上并不麻烦
      

  2.   

    建议:varchar全用varchar2代替,varchar以后会取消的!
    保存日期最佳还是用DATA
      

  3.   

    還是直接用Date型比較好。
    在Oracle中已經提供了豐富的轉化方式,to_char,to_date
    而且還有很多日期型的函數可以直接使用。最關鍵的是我認爲在數据存放和查詢上Date要比Varchar快。
    Varchar是按位比較,而date是直接比較的。在SQL server上好像日期的轉化函數不是很好
    有很多人用Varchar取代Date存放
      

  4.   

    用date,如果对该字段进行计算什么的,比较方便,你说的排序什么的,你可以to_char在排序也是一样的吧
      

  5.   

    直接用date类型,好处
    1. 保存还是比较方便,直接to_date()即可;
    2. 日期间比较比字符串比较快
    3. 日期函数比较丰富,便于进行直接日期比较或其他操作;
       如果是varchar 或者 varchar2 类型的话,在进行时间类型的查询的时候首先要进行类型转换,to_date()导致无法使用索引,数据量较大的时候需要建立函数索引来解决,在以后的维护方面增加负担
      

  6.   

    没有支持的观点吗?毕竟省去了许多to_date、to_char的转换。在不需要对日期计算的情况下,省却了许多转换。
      

  7.   

    如果你只需要保留到日期,不需要分秒的话,也可以用varchar2
      

  8.   

    直接保存为date()类型  查询的时候可以根据需要处理
      

  9.   

    不得不为保存、展现不断的to_date、to_char,其它丰富的函数却也用不上,对于效率的问题,确实是date型的优点,但对于一个SQL,数据类型对效率的影响相比表关联、IN要小得多……有没有支持varchar2的兄弟??
      

  10.   

    两个都支持~ 
    但要是我设计系统的话,
    我肯定用DateTime(或TimeStamp).原因: 
    1.是时间就该用时间类型~ 
    2.bind parameter可以直接传时间型的对象进SQL(比如C#的DateTime, Java的Date,TimeStamp)
    3.在程序中处理C#的DateTime和Java的Date应该都不难吧~
    4.用VarChar2的话,程序中要单独取得年,月,日,时,分,秒. 一定要用substring 的方法了, substring可能会报长度不正确的Exception哦~ (不过如果DB里的数据全部正确的话,那没事~)
    但用时间类型就碰不到这个问题,因为select返回的结果也是时间型, 比如返回给C#就是DateTime类型.