加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer---查询过程中的数据类型转化

发布时间:2020-12-12 12:45:07 所属栏目:MsSql教程 来源:网络整理
导读:SQLServer---查询过程中的数据类型转化 ? ???????? 前两天在维护某市人才服务中心的人事档案管理系统的时候,发现了这个一个问题新的档案编号规则是日期+已有档案最大编号+1(六位,不足六位在中间补零)(((CONVERT([varchar](9),[createTime],(112))+'')+ri

SQLServer---查询过程中的数据类型转化

?

???????? 前两天在维护某市人才服务中心的人事档案管理系统的时候,发现了这个一个问题新的档案编号规则是日期+已有档案最大编号+1(六位,不足六位在中间补零)(((CONVERT([varchar](9),[createTime],(112))+'')+right((100000000000.)+[num],(6))))例如:20150511007841。说实话真的不清楚当时为什么会用最大编号,而不是用总记录数+1(不存在删除数据),接下来说说遇到的问题,以及解决方法吧。


? ? ? ???问题再现


? ? ? ???查询表中总记录数+1

select count(number)+1 from T_UniversityStudent

? ? ? ? ?执行结果


? ? ? ???查询表中最大数据+1

select MAX(number)+1fromT_UniversityStudent

? ? ? ???执行结果


? ? ? ???问题原因


???????? 为什么明明数据库中有了7840条数据,而数据记录是每次加1,那为什么会造成这中问题呢?

???????? 我想有经验的开发者,已经知道了,是不是数据类型有问题了。在字符串的大小比较中9>1000是成立的,也就是说999>7840也是正确的。

我们通过排序来验证是否上述的说法是正确的

select number from T_UniversityStudentorderbynumber asc

? ? ? ???执行结果


? ? ? ???问题解决


???????? 既然我们已经知道了是字段设计的过程中存在问题,那么我们最简单的就是讲字段的数据类型改了,但由于我们不了解修改数据类型之后会不会造成不良的后果,因此这种方法并不是最好的。

???????? 这时我们就能用到cast函数和convert函数了。

? ? ? ???具体的用法如下

? ? ? ???通过将varchar类型转化成int类型排序(使用convert函数)

select number from T_UniversityStudentorderbyconvert(int,number)asc

? ? ? ???执行结果


???????? 将查询字段中的varchar转换成int

select MAX(cast(numberasint))+1fromT_UniversityStudent

???????? 执行结果


???????? 需要注意的是convert函数只能运用在SQLServer中而cast函数可以用在oracle和SQL Server中,至于其他数据库中是否支持还需要读者自己尝试了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读