合并日期和时间很慢,如何使其高效?

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

这是我的代码

concat(CONVERT(varchar(10), cast(cast(cast(DATE1 as int) as char(8)) as date), 101),

以上部分是创建日期格式,然后在下面与:

', ',
convert(varchar(5), (convert(time, left(RIGHT('000000' + CONVERT(varchar(6), TIME1), 6), 2)
+ ':' + substring(RIGHT('000000' + CONVERT(varchar(6), TIME1), 6), 3, 2)
+ ':' + substring(RIGHT('000000' + CONVERT(varchar(6), TIME1), 6), 5, 2))), 108))

返回时间。

将两个行输出合并为mm / dd / yyy,13:00

我正在转换原始字段,其中日期写为yyyymmdd,时间写为5-6位数,即71200(7:12,但秒始终为00)。

这花费了相当长的时间,所以我想一种提高代码效率的方法。

注意,我将日期与4个不同的时间列连接起来,所以也许这就是为什么要花费很长时间吗?

sql-server datetime time ssms concat
1个回答
0
投票

尝试使用DATEADD代替字符串操作:

DATEADD(MINUTE, TIME1%10000/100, 
  DATEADD(HOUR,TIME1/10000, 
    CAST(CAST(CAST(DATE1 as int) AS char(8)) AS datetime))

TIME1 / 10000 should give you the number of hours.  71200 -> 7 
TIME1 % 10000 should give you the number of minutes * 100. 71200 -> 1200 
TIME1 % 10000 / 100 will give you the number of minutes.  71200 -> 12

如果您经常查询此数据(比插入/更新的频率要多),或者比更新/插入性能更关心查询性能,那么您应该考虑在此表上保留一个持久化的计算列,这样您就不必在查询时不必进行这些计算。然后,您还可以为该列编制索引,如果您根据日期时间定期进行过滤,则将非常有帮助。

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