将DateTime时间从00:00:00转换为23:59:59

时间:2014-04-09 17:47:31

标签: sql sql-server sql-server-2012

在我的数据库表中,字段保存为2013-02-15 00:00:00.000。我希望他们应该是2013-02-15 23:59:59.999。那么如何转换2013-02-15 00:00:00.000到02-15 23:59:59.999。换句话说,只改变最短时间到最长时间。

3 个答案:

答案 0 :(得分:3)

DECLARE @Time TIME = '23:59:59.999'
SELECT dateColumn + @Time
FROM tableName

SQL Fiddle Demo

修改

将@time转换为(+)

之前的日期时间
DECLARE @Time TIME = '23:59:59.999'
SELECT dateColumn + CAST(@Time as DATETIME)
FROM tableName

答案 1 :(得分:2)

轻松完成:

SELECT dateCol + '23:59:59'

答案 2 :(得分:1)

日期时间数据类型不精确到千分之一秒,而是仅精确到333秒(BOL中的详细信息,它与实际存储数据的方式有关)。

运行此示例:

DECLARE @Test datetime = 'Feb 15, 2013'

PRINT convert(varchar(50), @Test, 109)

SET @Test = dateadd(ms, -1, @Test)
PRINT convert(varchar(50), @Test, 109)

SET @Test = dateadd(ms, -1, @Test)
PRINT convert(varchar(50), @Test, 109)

SET @Test = dateadd(ms, -1, @Test)
PRINT convert(varchar(50), @Test, 109)

PRINT ''

SET @Test = dateadd(ms, -3, @Test)
PRINT convert(varchar(50), @Test, 109)

SET @Test = dateadd(ms, -3, @Test)
PRINT convert(varchar(50), @Test, 109)

SET @Test = dateadd(ms, -3, @Test)
PRINT convert(varchar(50), @Test, 109)

这会产生:

Feb 15 2013 12:00:00:000AM
Feb 15 2013 12:00:00:000AM
Feb 15 2013 12:00:00:000AM
Feb 15 2013 12:00:00:000AM

Feb 14 2013 11:59:59:997PM
Feb 14 2013 11:59:59:993PM
Feb 14 2013 11:59:59:990PM

因此,最简单的方法是将日期时间更新为2013年2月15日之前的最高/最后可能时刻,您需要减去3毫秒,如上所示。在表格中,它将类似于:

UPDATE MyTable
 set MyDateTime = dateadd(ms, -3, MyDateTime)
相关问题