Sql server 获取datetime中唯一时间部分的最快方法是什么

Sql server 获取datetime中唯一时间部分的最快方法是什么,sql-server,datetime,time,sql-server-2016,Sql Server,Datetime,Time,Sql Server 2016,我的问题是,我们在数据库中使用的是Datetime列,但我们需要在不同的日历中显示日期,如Hijri或Shamsi中的时间 因此,由于查询复杂,转换的成本非常高,我需要一种有效的方法来获取时间,并将其与转换的日期部分连接起来 现在我正在使用这些方法 一,- 二,- 我的问题是: 哪一种更快或更合适?有没有更快的方法?只需将其转换为时间,因为这样可以保留正确的键入(仍然是日期和时间数据类型): 选择转换(时间(0)、日期时间值)、转换(日期时间值为时间(3)) 由于该值是日期时间,因此该值将精确

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

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

现在我正在使用这些方法

一,-

二,-

我的问题是:


哪一种更快或更合适?有没有更快的方法?

只需将其转换为
时间
,因为这样可以保留正确的键入(仍然是日期和时间数据类型):

选择转换(时间(0)、日期时间值)、转换(日期时间值为时间(3))

由于该值是
日期时间
,因此该值将精确到1/300秒,但是,请选择适合您的数据的精度。

只需将其转换为
时间
,因为这样可以保留正确的键入(它仍然是日期和时间数据类型):

选择转换(时间(0)、日期时间值)、转换(日期时间值为时间(3))

由于该值是
日期时间
,因此该值将精确到1/300秒,但是,请选择适合您的数据的精度。

格式可能是最合适的<代码>转换(…作为时间)也是一种可能性。一致认为
格式
可能是最慢的。对于单个标量值来说,它“很好”,但它的伸缩性非常差。如果您确实需要格式化字符串,但由于某种原因无法在演示层中使用,那么使用样式代码进行
CONVERT
,格式可能是最好的选择<代码>转换(…作为时间)也是一种可能性。一致认为
格式
可能是最慢的。对于单个标量值来说,它“很好”,但它的伸缩性非常差。如果您确实需要格式化字符串,但由于某种原因无法在表示层中使用,则可以使用样式代码进行
CONVERT
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
SELECT CONVERT(VARCHAR(10), @Job_start_execution_date , 108) JobStart;

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