项目中的许多日期,只需要保存到年月日,出于开发的简单(减少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均需要控制)
项目提交时,受到了客户的质疑,认为不是常规的方式,请问各位的项目中,是否也有用varchar存数日期型的???
varchar存数日期型的优势:
1、读去数据到页面显示时,不需要to_char的转换。
2、页面数据保存到数据库时,也省去了to_date的转换。varchar存数日期型依旧满足:
1、排序:字符串排序(格式固定)
2、区间查找:字符串区间查找(格式固定)
3、计算N日前等操作:to_date转换后即可操作
4、数据合法性检查:页面严格控制(无论是否用varchar均需要控制)
保存日期最佳还是用DATA
在Oracle中已經提供了豐富的轉化方式,to_char,to_date
而且還有很多日期型的函數可以直接使用。最關鍵的是我認爲在數据存放和查詢上Date要比Varchar快。
Varchar是按位比較,而date是直接比較的。在SQL server上好像日期的轉化函數不是很好
有很多人用Varchar取代Date存放
1. 保存还是比较方便,直接to_date()即可;
2. 日期间比较比字符串比较快
3. 日期函数比较丰富,便于进行直接日期比较或其他操作;
如果是varchar 或者 varchar2 类型的话,在进行时间类型的查询的时候首先要进行类型转换,to_date()导致无法使用索引,数据量较大的时候需要建立函数索引来解决,在以后的维护方面增加负担
但要是我设计系统的话,
我肯定用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类型.