日期:2014-05-19  浏览次数:20308 次

“不要使用日期字段,改用字符串char(19)替代”,不解
刚刚在网上看到一句话
“不要使用日期字段,改用字符串char(19)替代,如:2008-12-09   12:22:08。”

不太明白为什么?
请指点

------解决方案--------------------
把数据类型设置成日期是有很多不方便

典型的就是NULL

比如说审批的时候,刚发文还不知道啥时候会审批

NULL值要从界面传递到数据持久层,ORM不好处理
------解决方案--------------------
在SQL Server中,datetime是一个浮点数,其中小数点之前部分是天数,小数点后部分是毫秒数。可以想见,它比字符串要好很多,可以直接进行数学运算、排序等等。例如我们查询最近7天即将休假的员工,可以写:

declare @from datetime --明天开始计算
set @from=cast(cast(getdate() as int) as datetime)
select [工号] from [员工] where [休假起始日期] between @from and @from+6
------解决方案--------------------
用char统计分析会很不方便
------解决方案--------------------
问题在于

目前采用的整体框架,上层是不知道下层采用何种数据库的,是完全屏蔽数据库差异的

前台对实体中的Datetime赋值,是无法赋NULL值的,

只能搞个MAX VALUE或者MIN VALUE,然后在实体从数据持久层-> ORM层传递的过程中进行 "行级别 "过滤,那又会严重影响效率

现在我也很烦这事情

不太想把框架加入一些莫名其妙的规范来让它处理这些事情