【发布时间】:2012-07-24 16:37:42
【问题描述】:
我想知道当天的下午 4:30。以这种方式硬编码是行不通的:
SELECT '07242012 16:30:00.000'
事实证明,这比我想象的要困难。我该如何处理?
【问题讨论】:
标签: sql-server sql-server-2008-r2
我想知道当天的下午 4:30。以这种方式硬编码是行不通的:
SELECT '07242012 16:30:00.000'
事实证明,这比我想象的要困难。我该如何处理?
【问题讨论】:
标签: sql-server sql-server-2008-r2
SQL Server 2000 / 2005:
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);
【讨论】:
可能最简单的做法是将当前日期/时间转换为日期(剥离时间),将其转换回日期时间以允许使用日期时间的重载+ (plus),最后转换您想要的文本时间到日期时间。如下:
select cast(cast(sysutcdatetime() as date) as datetime) + cast('16:30' as datetime)
返回(2018 年 1 月 11 日运行时):
2018-01-11 16:30:00.000
【讨论】:
您可以根据需要使用日、小时、分钟等来构建它。
SELECT CURDATE() - interval 1 DAY + interval 2
【讨论】:
select(dateadd(day, datediff(day, 0, getdate()), 0) + '20:00') as specified_date
specified_date - 输出列名
20:00 - 指定时间(24 小时格式 - 默认)
getdate() - 获取今天的日期。
【讨论】: