【SQL Server】使用SQL比较版本号
2024-08-31 09:50:31
最近遇到这么一个场景,需要用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('' + REVERSE(parsename(REVERSE (Table."OS_VERSION"),1)),7),
case when REVERSE(parsename(REVERSE (Table."OS_VERSION"),2)) is null then '' else
right('' + REVERSE(parsename(REVERSE (Table."OS_VERSION"),2)),7) end) < '';
最新文章
- .net基本数据类型操作
- SE(homework3)_敏捷模型
- ORACLE的SPFILE与PFILE
- 利用Flex组件birdeye绘制拓扑关系图
- 骇客(Hacker)用语
- RAC 环境下修改归档模式
- JAVA之网页截屏
- 【转】Cocos2d-x 2.0 拖尾效果深入分析
- Kadj Squares - POJ 3347
- Scrapy开发
- NHibernate - HQL - 添加和更改
- 自定义表单-jsonform
- 浅谈Android布局
- java之equals 与 == 的区别
- position:fixed失效情况
- maya cmds pymel polyEvaluate 获取 bounding box
- linux操作2
- 第9天【btrfs文件系统、压缩工具及for语句、程序包管理】
- [书摘]图解HTTP 状态码
- Arraylist集合遍历输出