这是我的代码
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个不同的时间列连接起来,所以也许这就是为什么要花费很长时间吗?
尝试使用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
如果您经常查询此数据(比插入/更新的频率要多),或者比更新/插入性能更关心查询性能,那么您应该考虑在此表上保留一个持久化的计算列,这样您就不必在查询时不必进行这些计算。然后,您还可以为该列编制索引,如果您根据日期时间定期进行过滤,则将非常有帮助。