获取今天午夜的日期和时间并添加到它

use*_*621 25 sql sql-server sql-server-2008

是否有一个sql命令可以在午夜获取今天的日期,并且能够为它添加几分钟?

小智 37

现在是午夜时间:

Select DATEADD(d,0,DATEDIFF(d,0,GETDATE()))
Run Code Online (Sandbox Code Playgroud)

增加600分钟:

Select DATEADD(mi,600,DATEDIFF(d,0,GETDATE()))
Run Code Online (Sandbox Code Playgroud)


Cha*_*ana 26

是的,只需使用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))
Run Code Online (Sandbox Code Playgroud)

两者都选择在同一天上午10:00(或多或少)返回.这是有效的,因为,检查这个SO答案

编辑:添加示例脚本以显示其工作原理:

declare @dtTim datetime = getDate()
declare @today datetime = dateAdd(day, dateDiff(day, 0, @dtTim ), 0)
select  @dtTim, @today
Run Code Online (Sandbox Code Playgroud)


Jef*_*ata 13

您还可以转换date为剥离时间部分:

declare @minutes int = 600
declare @start datetime = cast(getdate() as date)
declare @finish datetime = dateadd(mi, @minutes, @start)
Run Code Online (Sandbox Code Playgroud)

虽然,老实说,我不知道它的表现如何

dateadd(day, datediff(day, 0, getdate()), 0)

  • @PeterPerháč`date`在SQL Server 2008中添加. (2认同)

Ste*_*ger 6

死灵法术:

最简单/最快的方法是:

SELECT 
    DATEADD(minute, 1, 
        CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS datetime)   
    )
Run Code Online (Sandbox Code Playgroud)

或使用UTC:

SELECT 
    DATEADD(minute, 1, 
        CAST(FLOOR(CAST( GETUTCDATE() AS float)) AS datetime)   
    )
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为在 SQL-server 中,日期时间是一个浮点值,整数部分表示从 1900 年 1 月 1 日开始的天数,子整数部分表示全天(24 小时)的百分比。

因此,如果(floor)将浮点数四舍五入为整数,则会得到午夜时间。
1900-01-01T00:00:00.000为 0。