仅获取日期时间的时间部分的最快方法是什么

What is the fastest way to get only time part of datetime

我的问题是我们在数据库中使用了 Datetime 列,但我们需要在不同的日历中显示我们的日期,例如 Hijri 或 Shamsi Time

因此,对于复杂的查询,转换成本非常高,我需要一种有效的方法来获取 Time 并将其与转换后的日期部分连接起来。

现在我正在使用这些方法

1-

CONCAT(dbo.getShamsiDate( JI.Job_start_execution_date ),' ',FORMAT(JI.Job_start_execution_date,'HH:mm:s')) AS [JobStart]

JobStart
1399/05/13 19:25:47

2-

SELECT CONVERT(VARCHAR(10), @Job_start_execution_date , 108) JobStart;

JobStart
----------
14:43:35

我的问题是:

哪个更快或更适合,有没有更快的方法?

只是 cast/convert 到 time,因为它保留了正确的类型(它仍然是日期和时间数据类型):

SELECT CONVERT(time(0),datetimevalue), CAST(datetimevalue AS time(3))

由于值为 datetime,该值将精确到 1/300 秒,但是,请选择适合您的数据的精度。