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