zoukankan      html  css  js  c++  java
  • 【SQL Server】使用SQL比较版本号

    最近遇到这么一个场景,需要用SQL从表里取出版本号小于'10.2'的所有数据。目前表中以存在的数据中,版本号有两种格式,一个是'X.Y',另一个是'X'。对于SQL Server来说,其没有string split函数,所以处理起来会麻烦一点。

    首先,我想到是用parsename函数,分别用'X.Y'和'X'两种格式做测试,可以发现'X'格式解析的不对,'5'应该是major version。

     要解决也不难,可以先把版本号逆置,这样解析出来的就是major不为空,而minor为空:

     但这样也有一个问题,就是'13'变成'31'了。好吧,那就对结果再逆置一下:

     下一步就是把NULL给一个默认值。同时由于major和minor的长度不会大于7,所以我的方法是把major和minor分别前面补0到7位,这里可以用right函数,然后拼接major和minor,例如'13.2'处理成'00000130000002',而'5'则处理成 '00000050000000',对比版本号'10.2'处理成'00000100000002',这样的话,版本号就能直接对比了。

    SQL 如下:

    select * from Table where CONCAT(right('0000000' + REVERSE(parsename(REVERSE (Table."OS_VERSION"),1)),7),
    case when REVERSE(parsename(REVERSE (Table."OS_VERSION"),2)) is null then '0000000' else right('0000000' + REVERSE(parsename(REVERSE (Table."OS_VERSION"),2)),7) end) < '00000100000002';
  • 相关阅读:
    JS浮点数的加减乘除运算
    鼓励心里的阳光
    mysql创建新用户并分配数据库权限
    CentOS下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)
    Python发送邮件
    SQL操作语句
    Mysql数据库操作语句
    Cookie,Session的区别
    Jmeter性能测试-分布式压力测试
    性能测试指标
  • 原文地址:https://www.cnblogs.com/seyjs/p/11996018.html
Copyright © 2011-2022 走看看