结合日期和时间很慢,如何使其高效?
Combine date and time is very slow, how to make it efficient?
这是我的代码
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))
这returns次。
将两者组合在同一行输出中作为 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
如果您经常查询此数据(比 inserting/updating 它更频繁),或者您更关心查询性能而不是 updating/insert 性能,那么您应该考虑制作一个持久化计算列在此 table 上,这样您就不必在查询时进行这些计算。然后,您还可以为该列编制索引,如果您定期根据日期时间进行过滤,这将非常有帮助。
这是我的代码
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))
这returns次。
将两者组合在同一行输出中作为 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
如果您经常查询此数据(比 inserting/updating 它更频繁),或者您更关心查询性能而不是 updating/insert 性能,那么您应该考虑制作一个持久化计算列在此 table 上,这样您就不必在查询时进行这些计算。然后,您还可以为该列编制索引,如果您定期根据日期时间进行过滤,这将非常有帮助。