sql server中字符串类型的日期如何比较大小

您所在的位置:网站首页 sql字符串格式 sql server中字符串类型的日期如何比较大小

sql server中字符串类型的日期如何比较大小

2023-12-14 06:55| 来源: 网络整理| 查看: 265

背景

              最近在维护NCRE教师端,发现一个问题:数据库中的日期是字符串格式的,可是为什么字符串类型的数据也可以比较大小呢?以下是两种比较方式:

一、用字符串比较

      这个方法很容易想到,就是纯粹地利用字符串来比较大小,比如有一个字段为adddate,其数据类型为varchar,要比较这个日期是不是大于某个日期,比如”2016-2-22”,那么可以直接写:where adddate>’2016-02-22’,这种方法很直观,当然也需要在格式上有所规范,比如,如果日期是2016年2月22日,就必须将日期保存为2016-02-22,否则比较的时候容易出错。        再举一个更直观的例子:从一个表中查询一个范围内的CollegeID,CollegeID从01–14,执行如下sql语句,结果如下:

SELECT * FROM StudentBindPaperTypeEntity WHERE CollegeID BETWEEN '10' AND '7'

这里写图片描述        讲解:比较范围:10—7 1.以01为例:为什么没有查出次数据?10vs01,相应的字符串进行比较,第一位:1vs0,1比0大,所以10比01大,所以01没有被查询出来 2.以14为例,为什么会出现在查询结果中? (1)10vs14 第一位:1vs1,两个相同,所以比较第二位 第二位:0vs4,4比0大,所以14>10,14通过第一个数比较,与第二数进行比较 (2)7vs14 第一位:7vs1,7>1,所以7>14 (3)综上:所以14在10–7的范围内 总结       我们明显可以看出,上面的比较用我们对数字的比较方法来说结果是错误的,因为在10–7这个范围内是没有数字的,可是为什么字符串类型的时间比较没有问题呢?因为相比较的时间的两个格式是相同的,所以结果正确,但是如果时间没有设置成相同的,那么结果就很有很有肯呢个发生问题,所以一般情况下不要使用这样的方法。

二、通过转换函数

             利用Sql提供的日期转换函数:CONVERT ([ length ], [, style]) 1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。 2)length用于指定数据的长度,缺省值为30。 3)用CONVERT() 函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。如果用这种方法来判断某一个字段的话,则存入的日期字段的字符串格式只要是能让sql server完成对日期的转换就可以了,而不一定要像第一种方法中的那样严格。还是说adddate字段,比如要比较它是否大于当前的日期,就可以这样写:where (CONVERT(varchar, adddate) >= CONVERT(varchar, GETDATE())) 。

总结

             以前从来没有思考过这个问题,这是一个学姐提出来的,可是很多东西不怕不知道就怕不知道。 第一点:看到两个日期进行比较的时候,我从来没有更深入的思考过,觉得这样比较就是理所当然呀,没有什么问题。 第二点:从来没有遇到过类似的问题,为什么学姐就可以思考这个问题呢?学姐思考的多是一方面,另一方面就是可能学姐之前遇到过类似的东西 ,所以扩展自己的接触面也是非常重要的一点。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3