3

场景:一个存储过程从代码中接收一个 DateTime,假设是 DateTime.Now 值,作为 datetime 参数。存储过程只需要在行上存储日期时间的日期部分,但保留所有与日期相关的算术,例如,在时间间隔内进行搜索并根据日期进行报告。

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

4

5 回答 5

4

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

如果由于某种原因您无法控制代码,则总有 convert(varchar(10), @YOURDATETIME, 101)

于 2008-09-17T04:33:24.787 回答
0

用时间 = 午夜存储日期

编辑:我假设 MS SQL Server

于 2008-09-17T04:24:19.283 回答
0

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

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

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

于 2008-09-17T04:29:54.030 回答
0

SQL Server 2008 具有不存储时间的仅日期类型 (DATE)。考虑升级。

http://www.sqlteam.com/article/using-the-date-data-type-in​​-sql-server-2008

于 2008-09-17T05:07:52.143 回答
0

如果您正在使用 Oracle,请在存储过程中对日期时间使用 TRUNC 函数。这将只返回日期部分。

于 2008-09-17T18:39:09.043 回答