在mssql 2005中保存DateTime而不需要小时,分钟和秒

时间:2009-03-27 08:26:10

标签: sql sql-server datetime

我想将sql2005中的日期保存为日期(不含小时分钟和秒)。 我想这样做是因为如果填写了小时,分钟和秒,则between函数并不总是正确的。

但是datetime和smalldatetime都不允许这样做,在2008年你有Date列可以做到这一点。

我也发现这个问题可以帮助我,但我不喜欢执行我的查询:How to remove the time portion of a datetime value (SQL Server)?

7 个答案:

答案 0 :(得分:7)

非演员方式:

SET @d = DATEADD(dd, 0, DATEDIFF(dd, 0, @dt))

这会将0和日期之间的天数加到0,从而使时间部分为零。

如果这比必须测试的显式CAST方法快。使用0表示将在此表达式中执行一些隐式转换。

答案 1 :(得分:1)

SELECT CONVERT (date, GETDATE()) -- Without hours, minutes and seconds.

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms188383.aspx

答案 2 :(得分:1)

您可以做的是确保存储的日期在将数据发送到数据库之前没有分钟和秒数。如果您根据现有日期时间创建日期时间,但将小时,分钟和秒设置为零,那么应用程序代码应该非常简单

答案 3 :(得分:0)

如果所有其他方法都失败了,您可以将其存储为某个时间点的秒整数值。这将允许您将其与以相同方式存储的其他日期进行比较而不进行强制转换。

答案 4 :(得分:0)

如果您在.NET中工作,可以使用

DateTime.Now.Date

只提供日期时间的日期部分。

答案 5 :(得分:0)

BETWEENs无效,因为日期时间的时间不是00:00:00.000,所以修复BETWEENS,而不是数据。

这将在一天内返回所有数据,无论时间如何

DECLARE @FilterDate datetime
SET @FilterDate='3/18/2009'

QUERY
    ...
    WHERE Column1 >= @FilterDate AND Column1 < @FilterDate + 1

这将返回日期范围内的所有数据,无论时间如何

DECLARE @StartFilterDate datetime
DECLARE @EndFilterDate datetime
SET @StartFilterDate ='3/18/2009'
SET @EndFilterDate ='3/30/2009'

QUERY
    ...
    WHERE Column1 >= @StartFilterDate AND Column1 < @EndFilterDate + 1

答案 6 :(得分:0)

SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()))