获取DateTime时间为23:59:59

Mat*_*att 13 sql datetime date

我正在尝试执行where语句,该语句指定DateTime字段位于上个月的开始和结束之间.

为此,我需要指定上个月的第一天的时间为00:00:00,而上个月的最后一天的时间为23:59:59.

这第二个条件让我很头疼..

有人可以帮我吗?

干杯

MSSQL 2008

Osc*_*mez 14

尝试:

SELECT DATEADD(ms, -3, '2011-07-20')
Run Code Online (Sandbox Code Playgroud)

这将是今天的最后23:59:59.

为什么3毫秒?,这是因为Microsoft SQL Server DATETIME列最多有3毫秒的分辨率(这是不会改变的).所以我们所做的就是减去3毫秒

  • 它实际上让你'23:59:59.997` (3认同)

ysr*_*srb 7

您也可以使用小于'<'而不等于.所以你不需要23:59:59.

例如.在哪里DateCreated <'20111201 00:00:00'

  • +1,这是你如何做到的.如果你只是去23:59:59那么你会在23:59:59.000和23:59:59.999之间忽略整个秒.即使你指定了毫秒,使用<而不是<=仍然只是更清洁. (3认同)

sim*_*sim 5

尝试此操作,这可能对您有所帮助。我使用以下两种方法之一来处理DATETIME字段中的时间部分进行比较:例如:获取一天的用户日志,即从今天的上午12:00:00到今天的日期日期,但在12:00:00 PM

DECLARE @FromDate datetime
DECLARE @ToDate datetime

SET @FromDate = GETDATE()
SET @ToDate = GETDATE()
Print '------------------------ '
PRINT @FromDate
PRINT @ToDate
SET @FromDate = CONVERT(DATETIME, CONVERT(varchar(11),@FromDate, 111 ) + ' 00:00:00', 111) 
SET @ToDate = CONVERT(DATETIME, CONVERT(varchar(11),@ToDate, 111 ) + ' 23:59:59', 111)
Print '------------------------ '
PRINT @FromDate
PRINT @ToDate



DECLARE @TEST_FROM DATETIME
SET @TEST_FROM = dateadd(month,((YEAR(@FromDate)-1900)*12)+MONTH(@FromDate)-1,DAY(@FromDate)-1) + ' 12:00:00'

DECLARE @TEST_TO DATETIME
SET @TEST_TO = dateadd(month,((YEAR(@ToDate)-1900)*12)+MONTH(@ToDate)-1,DAY(@ToDate)-1) + ' 23:59:59'

Print '------------------------ '
PRINT @TEST_FROM
PRINT @TEST_TO
Run Code Online (Sandbox Code Playgroud)

这将在“ SQL查询编辑器”屏幕中打印以下内容

------------------------ 
Dec 28 2011  3:18PM
Dec 28 2011  3:18PM
------------------------ 
Dec 28 2011 12:00AM
Dec 28 2011 11:59PM
------------------------ 
Dec 28 2011 12:00PM
Dec 28 2011 11:59PM
Run Code Online (Sandbox Code Playgroud)

参考使用转换的方法来自于我的经验,另一种方法是来自此链接http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx 玩得开心:)


Dev*_*_29 5

尝试使用 Datetime 数据类型的查询来获取

2018-01-29 23:59:59.997

select dateadd(ms, -3, (dateadd(day, +1, convert(varchar, GETDATE(), 101))))
Run Code Online (Sandbox Code Playgroud)