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

时间:2011-10-08 22:39:21

标签: sql sql-server sql-server-2008

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

6 个答案:

答案 0 :(得分:34)

日期现在是午夜时间:

Select DATEADD(d,0,DATEDIFF(d,0,GETDATE()))

ADD 600分钟:

Select DATEADD(mi,600,DATEDIFF(d,0,GETDATE()))

答案 1 :(得分:23)

是的,只需使用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(或多或少)返回。这是有效的,因为,请查看this SO answer

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

declare @dtTim datetime = getDate()
declare @today datetime = dateAdd(day, dateDiff(day, 0, @dtTim ), 0)
select  @dtTim, @today

答案 2 :(得分:12)

您还可以转发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)

答案 3 :(得分:2)

使用以下内容:

select DATEADD(SECOND, 36000, CAST(CONVERT(VARCHAR(10), GETDATE(), 101) AS datetime))

通过这种方式,您可以调整秒数以精确定位您想要的任何时间。

请参阅此处了解SQL Server中的日期/时间格式: SQL Server Date/Time Formatting

答案 4 :(得分:1)

创新:

最简单/最快的方法是:

SELECT 
    DATEADD(minute, 1, 
        CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS datetime)   
    )

或使用UTC:

SELECT 
    DATEADD(minute, 1, 
        CAST(FLOOR(CAST( GETUTCDATE() AS float)) AS datetime)   
    )

之所以可行,是因为在SQL Server中,datetime是一个浮点值,整数部分表示从01.01.1900开始的天,子整数部分表示整天(24h)的百分比。

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

答案 5 :(得分:-1)

我必须做类似的事情,创建一个程序,从前一天的某个时间运行到当天的某个时间这是我做的将开始日期设置为前一天的16:30,基本上减去你不想让它们回到0的部分,然后添加你想要的值。

-- 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) 

希望这有助于某人。