有没有一条 SQL 命令可以获取今天的午夜时间,并且能够在此基础上加上若干分钟?
有没有一条 SQL 命令可以获取今天的午夜时间,并且能够在此基础上加上若干分钟?
现在的日期是午夜时间:
Select DATEADD(d,0,DATEDIFF(d,0,GETDATE()))
增加600分钟:
Select DATEADD(mi,600,DATEDIFF(d,0,GETDATE()))
DATEADD(d,0,DATEDIFF(d,0,GETDATE()))
给出的是昨天的开始时间,而不是今天的开始时间。 - tymtamDATEADD(d,0,DATEDIFF(d,0,GETDATE()))
运行良好,可以得到当前日期的零点时间,例如今天是 2023-05-23 00:00:00.000
。 - CajunCoding可以,只需使用datediff和dateadd函数从任何日期中剥离时间,然后向该数字添加一天的小数部分即可。
Declare @aDate DateTime
Set @aDate = getDate()
Declare @Minutes Integer
Set @minutes = 600 -- 10 hours
Select DateAdd(day, DateDiff(day, 0, @aDate), 0) + @minutes / 1440.0 -- 1440 min/day
-- or You could also use the dateadd again...
Select DateAdd(minute, @minutes , DateAdd(day, DateDiff(day, 0, @aDate), 0))
两个查询都返回同一天的上午10:00(左右)。这是因为,嗯,查看 这个SO答案
编辑:添加示例脚本以展示如何运行:
declare @dtTim datetime = getDate()
declare @today datetime = dateAdd(day, dateDiff(day, 0, @dtTim ), 0)
select @dtTim, @today
date
类型以去除时间部分:declare @minutes int = 600
declare @start datetime = cast(getdate() as date)
declare @finish datetime = dateadd(mi, @minutes, @start)
老实说,我不知道它与dateadd(day, datediff(day, 0, getdate()), 0)
相比性能如何。
date
在 SQL Server 2008 中被添加。 - Jeff Ogatacast(getdate() as date)
和dateadd(d, 0, DATEDIFF(d, 0, getdate()))
的比较。
结果发现,cast
函数比dateadd
函数快10倍。 - DarthAyokas死灵术:
最简单/最快的方法是:
SELECT
DATEADD(minute, 1,
CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS datetime)
)
或者使用协调世界时:
SELECT
DATEADD(minute, 1,
CAST(FLOOR(CAST( GETUTCDATE() AS float)) AS datetime)
)
这个方法有效的原因是在SQL Server中,datetime是一个浮点值,整数部分代表从1900年1月1日开始算起到现在的天数,子整数部分代表一天中所占比例(24小时)。
所以,如果你将浮点数向下取整(floor)
到整数,就可以得到午夜时间。
1900-01-01T00:00:00.000
被表示为0。
2020-04-03 00:01:00.000
。我认为你想要一个零而不是一个一。SELECT DATEADD(minute, 0, CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS datetime))
- David Metcalfe请使用以下内容:
select DATEADD(SECOND, 36000, CAST(CONVERT(VARCHAR(10), GETDATE(), 101) AS datetime))
这样您就可以调整秒数,精确地找到所需的任何时间点。
有关 SQL Server 中日期/时间格式化,请参考以下链接: SQL Server 日期/时间格式化
-- Set Start Date to previous day and set start time to 16:30.00.000
SET @StartDate = GetDate()
SET @StartDate = DateAdd(dd,- 1, @StartDate)
SET @StartDate = DateAdd(hh,- (DatePart(hh,@StartDate))+16, @StartDate)
SET @StartDate = DateAdd(mi,- (DatePart(mi,@StartDate))+30, @StartDate)
SET @StartDate = DateAdd(ss,- (DatePart(ss,@StartDate)), @StartDate)
SET @StartDate = DateAdd(ms,- (DatePart(ms,@StartDate)), @StartDate)
希望这能帮助到某个人。