场景:一个存储过程从代码中接收一个DateTime参数,该参数的值为DateTime.Now。 存储过程需要将datetime的日期部分存储在行中,但保留所有与日期相关的算术运算,以便进行时间间隔搜索和基于日期的报告。
我知道有几种方法,但考虑到性能和浪费空间,哪种方法更好?
业务逻辑应该在存储过程之外处理。存储过程的工作应该是保存传递给它的数据。如果要求只存储日期而不是时间,则BL/DL应该传入DateTime.Now.Date(或等效的...基本上是DateTime对象的日期部分)。
如果由于某些原因无法控制代码,则始终可以使用convert(varchar(10), @YOURDATETIME, 101)。
将日期与时间存储为午夜
编辑:我假设使用的是 MS SQL Server
基本上,您只需要存储DateTime对象的日期部分。这意味着无论您希望如何处理查询数据,返回的日期始终将设置为00:00:00。
在此情况下,与时间相关的函数是无用的(即使您的原始DateTime对象使用它们),因为数据库会删除此信息。
但是,与日期相关的算术仍将适用,尽管您必须假定从数据库返回的每个日期的时间为午夜。
SQL Server 2008有一个仅存储日期而不存储时间的类型(DATE)。考虑升级。
http://www.sqlteam.com/article/using-the-date-data-type-in-sql-server-2008