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