如何仅保留日期时间值的时间部分(SQL Server)?

3
这是我用来获取“HH:MM”字符串的代码:

HH:MM是指小时和分钟。

CONVERT(varchar(5), time_requested, 108)

我认为可能有更加优雅的方式,甚至可能更加高效(请参见类似问题:如何从日期时间值中删除时间部分(SQL Server)?)。
要求:
  • 最终结果必须易于转换为字符串(以便能够将某些字段time_createddate_created这样的字段连接起来)。
  • 必须涵盖以下两种情况:HH:MMHH:MM:SS

CONVERT(varchar(5), time_requested, 108)。我认为根据您的第一个要求,这是最优雅的解决方案。您使用的是哪个版本的 SQL SERVER - Pரதீப்
使用2008和2012... - user3341592
2个回答

5
Declare @D datetime = GetDate()      -- Data Type could be Time as well

Select CONVERT(varchar(8), @D, 108)  -- for HH:MM:SS  11:27:26
Select CONVERT(varchar(5), @D, 108)  -- for HH:MM     11:27

未提及的是,如果您使用的是2012年或更高版本,您还可以使用Format()函数。

Declare @D DateTime = '2016-10-22 13:30:25'

Select Format(@D,'HH:mm')         -- 13:30
Select Format(@D,'hh:mm:ss tt')   -- 01:30:25 PM

不知道有“Format”这个功能。谢谢! - user3341592
@user3341592 这是一个具有许多选项的伟大功能,然而,在大数据集上的性能非常糟糕。 - John Cappelletti

4

你的方法很好。它产生了一个值的字符串表示。

你还可以转换为time数据类型:

select cast(time_requested as time)

但需要注意的是,这是“无格式”的 - 它包含小时、分钟、秒和秒的分数。因此,您的方法可能是更好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接