我正在尝试使用where语句指定DateTime字段位于上个月的开始和结束之间。
为此,我需要指定上个月的第一天的时间为00:00:00,而上个月的最后一天的时间为23:59:59。
这第二个条件让我很头疼..
有人能帮助我吗?
干杯
MSSQL 2008
答案 0 :(得分:13)
尝试:
SELECT DATEADD(ms, -3, '2011-07-20')
这将是今天的最后一次23:59:59。
为什么3毫秒?,这是因为Microsoft SQL Server DATETIME列最多具有3毫秒的分辨率(这是不会改变的)。所以我们所做的就是减去3毫秒
答案 1 :(得分:7)
您还可以使用小于'<'没有平等。所以你不需要23:59:59。
EG。 WHERE DateCreated< '20111201 00:00:00'
答案 2 :(得分:4)
试试这个,它可能对你有所帮助 我使用这两种方法之一来处理DATETIME字段中的时间部分来进行比较 EX:获取一天的用户日志,即从今天的上午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
这将在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
参考 使用转换的方式来自我的经验,另一种方式来自此链接http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx 玩得开心:))
答案 3 :(得分:1)
尝试使用Datetime数据类型获取此查询
2018-01-29 23:59:59.997
select dateadd(ms, -3, (dateadd(day, +1, convert(varchar, GETDATE(), 101))))
答案 4 :(得分:0)
declare @myDate DateTime, @lastMonth DateTime, @thisMonth DateTime
set @myDate = GETDATE()
set @lastMonth = DateAdd(month, -1, CAST(@myDate as Date))
set @thisMonth = DateAdd(day, -DatePart(day, @myDate)+1, CAST(@myDate as Date))
select @myDate as MyDate, DateAdd(day, -DatePart(day, @lastMonth) + 1, @lastMonth) FirstDay, DateAdd(second, -1, @thisMonth) LastDay
结果
答案 5 :(得分:0)
尝试一下:
SELECT dateadd(millisecond,-1,cast(cast(getdate() AS date) AS datetime2))
答案 6 :(得分:0)
SELECT DATEADD(ms, -2, CAST(CONVERT(date, DATEADD (DAY,1,getdate())) AS varchar(10)))
输出:yyyy-mm-dd 23:59:59.997
2020-08-31 23:59:59.997
答案 7 :(得分:-1)
---我希望有人觉得这很有用
声明@TodaysDate smalldatetime
声明@TodaysDatepm smalldatetime
----首先我得到午夜的日期和时间,即 16/05/2021 12:00 am
set @TodaysDate = DATEADD(minute, 0,CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS datetime))
----- 然后我在上面加上 23 小时 59 分钟,即 (60*23)+59
------给出 1439,从那里我使用 dateadd 函数
set @TodaysDatepm =DATEADD(minute, 1439, @TodaysDate)
------ 这将始终打印出您在@TodaysDate 中设置的午夜
打印@TodaysDatepm