如何在datetime字段中存储仅日期的最佳方法?

3

场景:一个存储过程从代码中接收一个DateTime参数,该参数的值为DateTime.Now。 存储过程需要将datetime的日期部分存储在行中,但保留所有与日期相关的算术运算,以便进行时间间隔搜索和基于日期的报告。

我知道有几种方法,但考虑到性能和浪费空间,哪种方法更好?


请问您使用的是哪种数据库? - Brettski
抱歉,这是SQL Server 2005,标签是tsql,以为这就足够了 >_< - David Lay
5个回答

4

业务逻辑应该在存储过程之外处理。存储过程的工作应该是保存传递给它的数据。如果要求只存储日期而不是时间,则BL/DL应该传入DateTime.Now.Date(或等效的...基本上是DateTime对象的日期部分)。

如果由于某些原因无法控制代码,则始终可以使用convert(varchar(10), @YOURDATETIME, 101)。


我可以进一步评论,这在我的生产代码中运行良好。在VbNet中,我设法通过说“_variable = value.Date”修改了所有DateTime类型的设置器,仅接收日期,从此时起,它能够优雅地在数据库中相互传递。谢谢! - David Lay

0

将日期与时间存储为午夜

编辑:我假设使用的是 MS SQL Server


0

基本上,您只需要存储DateTime对象的日期部分。这意味着无论您希望如何处理查询数据,返回的日期始终将设置为00:00:00。

在此情况下,与时间相关的函数是无用的(即使您的原始DateTime对象使用它们),因为数据库会删除此信息。

但是,与日期相关的算术仍将适用,尽管您必须假定从数据库返回的每个日期的时间为午夜。


0

0
如果您正在使用Oracle,那么在存储过程中,请使用TRUNC函数来处理日期时间。这将仅返回日期部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接