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';
  • 相关阅读:
    [leetcode-79-Word Search]
    [leetcode-563-Binary Tree Tilt]
    [leetcode-561-Array Partition I]
    [leetcode-556-Next Greater Element III]
    [leetcode-554-Brick Wall]
    [leetcode-557-Reverse Words in a String III]
    [leetcode-532-K-diff Pairs in an Array]
    dev 官网
    DataTable 设置primarykey 后进行 Merge操作
    对称矩阵 一个简单的小把戏
  • 原文地址:https://www.cnblogs.com/seyjs/p/11996018.html
Copyright © 2011-2022 走看看