我正在处理一个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
。
我知道这样做的好方法吗?
答案 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小时。