• 导赏!广美研究生导师带你看2018研究生毕业作品展 2019-04-20
  • 【沙湾风光】百花盛开 迎六月 2019-04-20
  • 【专题】传统文化点亮精彩生活 2019-04-10
  • 四川九寨沟发生特大泥石流 冲毁民房、省道205线被埋 2019-04-10
  • 探寻秘境阿勒泰《章棋的视频日志》 2019-04-06
  • 讲述波兰女子拯救百名犹太儿童的故事 美国教师获森德勒奖 2019-04-06
  • 一个理想的数列递减,看着就想笑,根本放不出什么屁来 2019-04-05
  • 给脑部做个“大扫除” 让大脑充分放松 2019-04-05
  • 海上洄游时 北海狗 连续两周深睡眠 2019-04-03
  • “石家庄太行大街发生重大事故”是谣言!传谣者被拘留 2019-04-01
  • 4号线为端午节“加班” 2019-04-01
  • 这18家小众颜高又难找的家居店,一次性帮你搜罗全了! 2019-03-24
  • “首届中国非处方药行业品牌宣传月”活动将在北京举办 2019-03-24
  • 《礼记》中的礼乐制度与“生活政治” 2019-03-23
  • 众泰T300 1.5L CVT车型上市 6.98万起 2019-03-23
  • 广东体彩快乐十一选五:sql server中字符串类型的日期如何比较大小

    版权声明:本文为博主原创文章,未经博主允许不得转载。 //www.sde9.com/Sunny5319/article/details/79375651
    广东快乐十分20选8计划 www.sde9.com
    背景

          
           最近在维护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完成对日期的转换就可以了,而不一定要像第一种方法中的那样严格?;故撬礱dddate字段,比如要比较它是否大于当前的日期,就可以这样写:where (CONVERT(varchar, adddate) >= CONVERT(varchar, GETDATE())) 。


    总结

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

    没有更多推荐了,广东快乐十分20选8计划

  • 导赏!广美研究生导师带你看2018研究生毕业作品展 2019-04-20
  • 【沙湾风光】百花盛开 迎六月 2019-04-20
  • 【专题】传统文化点亮精彩生活 2019-04-10
  • 四川九寨沟发生特大泥石流 冲毁民房、省道205线被埋 2019-04-10
  • 探寻秘境阿勒泰《章棋的视频日志》 2019-04-06
  • 讲述波兰女子拯救百名犹太儿童的故事 美国教师获森德勒奖 2019-04-06
  • 一个理想的数列递减,看着就想笑,根本放不出什么屁来 2019-04-05
  • 给脑部做个“大扫除” 让大脑充分放松 2019-04-05
  • 海上洄游时 北海狗 连续两周深睡眠 2019-04-03
  • “石家庄太行大街发生重大事故”是谣言!传谣者被拘留 2019-04-01
  • 4号线为端午节“加班” 2019-04-01
  • 这18家小众颜高又难找的家居店,一次性帮你搜罗全了! 2019-03-24
  • “首届中国非处方药行业品牌宣传月”活动将在北京举办 2019-03-24
  • 《礼记》中的礼乐制度与“生活政治” 2019-03-23
  • 众泰T300 1.5L CVT车型上市 6.98万起 2019-03-23
  • 老时时彩开奖记录结果 排列三走势图带连线 足彩比分直播500 奥兔奥彩票网站 双色球后区计算公式 北京赛车杀号公式 双色球基本走势图 澳洲幸运5开奖预测 重庆时时彩软件手机版 福建时时彩开奖查询 快三预测软件 北京赛车pk10计划安卓 福建时时彩官网平台 天天北京pk10计划软件 浙江体彩11选5五码分布图 新浪爱彩网