使用今天的日期在特定时间构造 DateTime

问题描述 投票:0回答:4

我想获取当天下午 4:30 的信息。这种方式硬编码不起作用:

SELECT '07242012 16:30:00.000'

事实证明这比我想象的要困难。我该如何处理这个问题?

sql-server sql-server-2008-r2
4个回答
39
投票

SQL Server 2000 / 2005:

SELECT DATEADD(MINUTE, 16.5*60, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));

-- or

SELECT CONVERT(DATETIME, CONVERT(CHAR(9), CURRENT_TIMESTAMP, 112) + '16:30');

-- or

SELECT DATEADD(MINUTE, 16.5*60, {fn curdate()});

SQL Server 2008/2008 R2:

DECLARE @d date = CURRENT_TIMESTAMP;
SELECT DATEADD(MINUTE, 16.5*60, CONVERT(datetime,@d));

SQL Server 2012+

DECLARE @d date = CURRENT_TIMESTAMP;
SELECT SMALLDATETIMEFROMPARTS
(
  YEAR(@d), MONTH(@d), DAY(@d), 16, 30
);

2
投票

可能最简单的方法是将当前日期/时间转换为日期(去掉时间),将其转换回日期时间以允许使用日期时间的重载

+ (plus)
,最后将所需的文本时间转换为约会时间。如下:

select cast(cast(sysutcdatetime() as date) as datetime) + cast('16:30' as datetime)

返回(2018 年 1 月 11 日运行时):

2018-01-11 16:30:00.000

0
投票

您可以根据需要构建日、小时、分钟等。

SELECT CURDATE() - interval 1 DAY + interval 2 

0
投票
 select(dateadd(day, datediff(day, 0, getdate()), 0) + '20:00') as specified_date

specified_date - 输出列名称

20:00 - 指定时间(24 小时格式 - 默认)

getdate() - 获取今天的日期。

© www.soinside.com 2019 - 2024. All rights reserved.