SQL 存储过程语句拼接愁人的时间类型
背景介绍:有一个小需求 要根据传入的起止时间,没一个小时统计一下数据的平均值,我就想到了用存储过程来实现。
sql写完之后一执行,
咦~怎么回事 ,我没有转换类型的地方啊,难道是 语句拼接出错了。
下面是定义的两个时间变量 格式都是DateTime格式的,
问题就出在了时间类型的语句拼接上,想了两个解决方案,
拼接的时候把时间改为varchar类型的,或者直接把原来的时间类型定义为varchar类型的。
类型转换用CAST() 函数
改完之后 一执行
数据有了,但是有点不对啊,我自己加的测试数据是一个小时一条数据啊,怎么会有一行 是 0 呢。
仔细查看后 发现查询是的时间有问题。(这难道是sql 默认的时间格式吗)
存储过程中用于查询的两个时间数据的格式 只是精确到分钟,而我自己添加的测试数据 中有连续的几个小时的数据都是 59分 多少多少秒,就导致进行运算的时候
把本该数据这一小时内的数据 计算到了上一个小时中去(很庆幸自己添加的数据帮自己找到了一个隐藏的隐患啊)。
解决方法:
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
修改一下时间格式。