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

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中,至于其他数据库中是否支持还需要读者自己尝试了。

时间: 2024-11-09 00:05:58

SQLServer---查询过程中的数据类型转化的相关文章

聊聊MapReduce处理过程中的数据类型与数据格式

MapReduce处理过程总览 对于MP的处理过程我想大部分人都已经知道了其原理,思路不难,这是肯定的,但是整个过程中需要考虑的细枝末节的点还挺多的,MP的输入输出格式就是其中的一点,那本文就带领大家看看MP中的格式设置问题. map函数,起到了如下的转换作用:map:(k1,v1)->list(k2,v2) reduce 函数,则起到了这样的格式转换作用:reduce:(k2,list(v2))->list(k3,v3) 怎么,你说你看不懂?那看来你还是没有对mapreduce的过程有所理解

数据库异常膨胀-SQLSERVER数据同步过程中,数据库急速,异常膨胀!

问题描述 SQLSERVER数据同步过程中,数据库急速,异常膨胀! 两台服务器A,B上的sqlserver需要同步两个表的数据,B中的某两张表数据要保持和A中的一样,第三方系统会没5分钟想A中插入一些新的数据.这里我采用了快照方式在A中发布要同步的两张表的数据,没两分钟更新一次快照,在服务器B上订阅A发布的数据.数据同步看起来都是没问题的,B中会得到A的新数据,可是一个月不到,B中对应的数据库文件竟然已经从原来的1G多一点的样子达到100+G,几乎要超过磁盘的最大容量,而我看A中的数据库文件大小

[SQL]不要让SQLServer帮你自动转换SQL命令中的数据类型

server|sqlserver|数据|数据类型|转换 为什么不要让SQLServer帮你自动转换SQL命令中的数据类型Report Date:   2003/12/5 Prepared by:     郑昀 Article last modified on 2004-2-16 The information in this article applies to: ü         Microsoft SQL Server 2000,7.0问题陈述:有一天,执行 SELECT * FROM X

SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误

   今天一个同事突然告诉我,以前跑得很正常的一个SQL语句,执行时突然报如下错误:         消息1222,级别16,状态18,第1 行         已超过了锁请求超时时段.         消息8630,级别16,状态1,第1 行         内部查询处理器错误: 查询处理器在执行过程中遇到意外错误. 我 执行了一下这个SQL语句,也是报如上错误,感觉有点奇怪,还是第一次遇到这种错误.我初步怀疑是SQL中某个表出现一致性错误或分配错误等原因造成.于 是先用DBCC CHECKT

sql server-c# sqlserver 查询两个表中数据用datagridview 显示出来 老师出错 求大神指导

问题描述 c# sqlserver 查询两个表中数据用datagridview 显示出来 老师出错 求大神指导 string sql = " select a.2, a.3, b.2, b.3 from a, b, c where a.1= c.1 and b.1 = c.1 "; //查询语句太长 我就直接把意思表达出来 没有粘代码 DataSet ds1 = new DataSet(); DataTable dt = new DataTable (); DataSet ds2 =

MySQL数据库中把int转化varchar引发的慢查询_Mysql

最近一周接连处理了2个由于int向varchar转换无法使用索引,从而引发的慢查询. CREATE TABLE `appstat_day_prototype_201305` ( `day_key` date NOT NULL DEFAULT '1900-01-01', `appkey` varchar(20) NOT NULL DEFAULT '', `user_total` bigint(20) NOT NULL DEFAULT '0', `user_activity` bigint(20)

Win7系统ThinkPad笔记本分区过程中提示转化为活动分区例子

  在使用压缩卷创建分区的过程中可能会出现如下提示     此问题是由于MBR系统只支持4个主分区造成的,出现此提示后千万不要点击确定,否则会造成系统无法进入,解决此问题的方法如下:   方法一:删除休眠分区   点击开始—所有程序—附件,在命令提示符上点击右键,选择“以管理员身份运行”     输入命令diskpart进行分区调整     输入命令list disk,查看电脑安装了几块硬盘     选中系统安装的磁盘,一般是disk0,输入命令sel disk 0     输入命令list p

看懂SqlServer查询计划

原文:看懂SqlServer查询计划 对于SQL Server的优化来说,优化查询可能是很常见的事情.由于数据库的优化,本身也是一个涉及面比较的广的话题, 因此本文只谈优化查询时如何看懂SQL Server查询计划.毕竟我对SQL Server的认识有限,如有错误,也恳请您在发现后及时批评指正. 首先,打开[SQL Server Management Studio],输入一个查询语句看看SQL Server是如何显示查询计划的吧. 说明:本文所演示的数据库,是我为一个演示程序专用准备的数据库,

详解SQLite中的数据类型_数据库其它

 大多数 SQL 数据库引擎 (据我们所知,除 SQLite 之外的所有 SQL 数据库引擎)都使用严格的静态类型.使用静态类型,值的类型便由它的容器 -- 存储值的特定的列 -- 来决定. SQLite 使用更通用的动态类型系统.在 SQLit 中,值的数据类型与值本身相关,而不是与它的容器.SQLite 的动态类型系统与其它数据库引擎的常用静态类型系统是向后兼容的,在这个意义上,工作在静态类型数据库上的 SQL 语句应该以同样的方式工作在 SQLite 中.然而,SQLite 中的动态类型允