最近遇到这么一个场景,需要用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) < '';

最新文章

  1. .net基本数据类型操作
  2. SE(homework3)_敏捷模型
  3. ORACLE的SPFILE与PFILE
  4. 利用Flex组件birdeye绘制拓扑关系图
  5. 骇客(Hacker)用语
  6. RAC 环境下修改归档模式
  7. JAVA之网页截屏
  8. 【转】Cocos2d-x 2.0 拖尾效果深入分析
  9. Kadj Squares - POJ 3347
  10. Scrapy开发
  11. NHibernate - HQL - 添加和更改
  12. 自定义表单-jsonform
  13. 浅谈Android布局
  14. java之equals 与 == 的区别
  15. position:fixed失效情况
  16. maya cmds pymel polyEvaluate 获取 bounding box
  17. linux操作2
  18. 第9天【btrfs文件系统、压缩工具及for语句、程序包管理】
  19. [书摘]图解HTTP 状态码
  20. Arraylist集合遍历输出

热门文章

  1. redis 持久化之 RDB &amp; AOF
  2. Spring Boot常用的注解以及含义&lt;持续更新&gt;
  3. 基于Docker 搭建 Jenkins
  4. T100——英文版凭证报表
  5. Linux更改ext4根目录文件系统大小
  6. Java Web ClassLoader工作机制
  7. [转载]VS2005的工程用VS2010打开后,用VS2005不能打开的解决方法
  8. EntityFramework学习要点记一
  9. Pytorch中randn和rand函数的用法
  10. wpf GeometryDrawing 绘制文字