如何使用我自己的时间部分在SQL中格式化日期

时间:2015-12-29 20:33:51

标签: sql-server datetime datediff

我正在处理一个SQL查询,它返回一个整数,它是两个给定日期之间的分钟数,如下所示

DATEDIFF(mi, date_one, getdate())

以上查询以分钟为单位返回两个日期的差异,但对于getdate(),我想提供自己的时间。

例如,考虑

date_one= 2015-12-29 13:39:03.000
getdate() return current date and time ie., 2015-12-29 14:33:50.000

但是,我想将getdate()中的时间部分更改为某些10:00:00.00,以便getdate()为2015-12-29 10:00:00.00,方法是传递一个小时整数10

我知道这样做的好方法吗?

5 个答案:

答案 0 :(得分:2)

这将使用getDate,但是您可以设置自己的小时。只需替换第二个参数(您想要的任何小时为10)。在dateDiff函数中使用此表达式代替getDate()。

DATEADD(hh, 10, DATEADD(d, DATEDIFF(d, 0, getDate()), 0))

您还可以添加分钟,秒,毫秒等,以获得所需。

这里我要加633分钟使它成为10点33分(将第一个参数改为mi分钟)。

select DATEADD(mi, 633, DATEADD(d, DATEDIFF(d, 0, getDate()), 0))

有关第一个参数的其他值,请参阅文档:https://msdn.microsoft.com/en-us/library/ms186819.aspx

以下是如何使用它:

DATEDIFF(mi, getDate(),  
                DATEADD(mi, 633, DATEADD(d, DATEDIFF(d, 0, getDate()), 0))
               )

这将为您提供当前时间到当天10:33的分钟数。这是一个sqlfiddle:http://sqlfiddle.com/#!6/9eecb7/5407

答案 1 :(得分:1)

我觉得这个功能很有用:

CREATE FUNCTION [dbo].[StripTimeFromDateTime] 
(
    @date DateTime
)
RETURNS DateTime
AS
BEGIN

    RETURN DATEADD(dd, DATEDIFF(dd, 0, @date), 0)

END

这会将时间从日期时间开始,将其留在00:00:00.000。然后你可以:

SELECT DATEADD(hour, 10, dbo.StripTimeFromDateTime(GetDate()))

答案 2 :(得分:1)

请注意以下示例:

select 
  cast('2015-12-28 12:15:00' as datetime), 
  getdate(), 
  cast(cast(convert(date, getdate()) as varchar(20)) + ' 10:00:00' as datetime);

|----------------------------|----------------------------|----------------------------|
| December, 28 2015 12:15:00 | December, 29 2015 20:42:35 | December, 29 2015 10:00:00 |

您使用的示例:

with example as (
  select cast('2015-12-28 12:15:00' as datetime) as date_one
)
select 
  date_one,
  cast(cast(convert(date, getdate()) as varchar(20)) + ' 10:00:00' as datetime) as myown,
  datediff(
    mi, 
    date_one, 
    cast(cast(convert(date, getdate()) as varchar(20)) + ' 10:00:00' as datetime)
  ) as minutes
from example;

结果:

|                   date_one |                      myown | minutes |
|----------------------------|----------------------------|---------|
| December, 28 2015 12:15:00 | December, 29 2015 10:00:00 |    1305 |

关于SQLFiddle的示例:http://sqlfiddle.com/#!3/9eecb7/6599

我使用varchar的原因是可以灵活地键入时间,例如' 10:15:00'或其他时间的变化。

答案 3 :(得分:1)

此单行将为当前日期提供时间部分替换为您想要的常量

date

这是如何运作的:

将getdate()结果转换为datetime,然后返回select cast(cast(getdate() as date) as datetime)以获取当前日期而无需时间。

time

演员' 10:00:00'到datetime然后再到select cast(cast('10:00:00' as time) as datetime)以获得10:00:00作为日期时间。

select cast(cast(getdate() as date) as datetime) + cast(cast('10:00:00' as time) as datetime)

添加两个

var azure = require('azure-storage'); var aztd = azure.createTableService(); var azseg = azure.TableUtilities.entityGenerator; console.log("AZSEG " + Object.getOwnPropertyNames(azseg).filter(function (p) { return typeof azseg[p] === 'function'; })); console.log("AZTD " + Object.getOwnPropertyNames(aztd).filter(function (p) { return typeof aztd[p] === 'function'; })); aztd.createTableIfNotExist('table1', function (e, result, res) { if (result) console.log('Table created'); });

全部

答案 4 :(得分:1)

选择DATEADD(hh,10,CONVERT(Datetime,CONVERT(date,GETDATE())))

首先删除时间,然后再添加10小时。