我想在当天的下午4点30分。硬编码这种方式不起作用:在特定时间使用今天的日期构建DateTime
SELECT '07242012 16:30:00.000'
这被证明比我想象的要困难。我如何解决这个问题?
我想在当天的下午4点30分。硬编码这种方式不起作用:在特定时间使用今天的日期构建DateTime
SELECT '07242012 16:30:00.000'
这被证明比我想象的要困难。我如何解决这个问题?
的SQL Server2005分之2000:
SELECT DATEADD(MINUTE, 30, DATEADD(HOUR, 16, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP)));
-- or
SELECT DATEADD(MINUTE, (16*60) + 30, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))
-- or
SELECT CONVERT(DATETIME, CONVERT(CHAR(9), CURRENT_TIMESTAMP, 112) + '16:30');
的SQL Server 2008+:
SELECT CONVERT(DATETIME, CONVERT(DATE, CURRENT_TIMESTAMP)) + '16:30';
的SQL Server 2012:
SELECT SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 16, 30);
什么,没有SQL 7? 6.5? :) – 2012-07-24 17:11:54
@NathanSkert我认为第一个代码块也可以在7.0/6.5中工作,但我并不打算将一个实例放在一起来证明它。 :-) – 2012-07-24 19:04:25
答案非常全面,谢谢Aaron! – 2012-07-25 16:48:38
大概最容易做的事情是投当前日期/时间到日期(剥离时间),将其重新转换为日期时间以允许使用日期时间的重载+ (plus)
,并最终将所需的文本时间投射到日期时间。具体如下:
select cast(cast(sysutcdatetime() as date) as datetime) + cast('16:30' as datetime)
回报率(当2018年1月11日执行):
2018-01-11 16:30:00.000
这并没有真正回答这个问题。如果您有不同的问题,可以通过单击[提问](https://stackoverflow.com/questions/ask)来提问。您也可以[添加赏金](https://stackoverflow.com/help/privileges/set-bounties)来更多地关注这个问题。 - [来自评论](/ review/low-quality-posts/18476550) – 2018-01-10 16:22:59
这看起来像是一个合理的答案,但如果你在这里添加一些解释,会更好。代码片段本身并不像解释你在做什么的段落那样有用,后面跟着说明这个想法的代码。 – Caleb 2018-01-10 16:55:12
我已经扩大了答复。希望现在看起来更有价值 – 2018-01-11 09:22:56
在未来,如果你meantion你使用的是什么版本的SQL Server它可以是非常有帮助的。 – 2012-07-24 17:01:27
啊,会更新这个问题来反映这一点。 – 2012-07-25 16:47:39
我通过标记更改了编辑以指示版本。比试图找到隐藏在问题中的版本信息更容易。 – 2012-07-25 16:48:29