“不要使用日期字段,改用字符串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层传递的过程中进行 "行级别 "过滤,那又会严重影响效率
现在我也很烦这事情
不太想把框架加入一些莫名其妙的规范来让它处理这些事情