1

比较两个版本号的跨平台语法是什么?一个版本有两部分:主要版本和次要版本,都是整数。

要比较两个版本,首先要比较它们的主要版本。如果主要版本相同,请比较它们的次要版本。

例如,

Product Table:

version  name
--------------
1.8      Bar
12.23    Foo
23.15    Hello

SQL

Select * from Product where version < "5.12"

它应该返回版本 1.8 的第一行。是否有任何适用于不同 SQL 平台的 sql 语法?

具体来说,我希望它可以在这些平台上工作:

  • 甲骨文
  • mysql
  • SQL 服务器
  • sqlite
4

1 回答 1

0

核心 ANSI SQL-99 兼容:

select * from product
order by cast(version as int),
         cast(substring(version from position('.' in version) + 1) as int);

即首先按整数部分排序。.然后按字符后面的“整数”排序。

执行为:

SQL>create table product (version varchar(10), name varchar(10)); 
SQL>insert into product values ('1.8', 'Bar'); 
SQL>insert into product values ('12.23', 'Foo');
SQL>insert into product values ('23.15', 'Hello');
SQL>insert into product values ('1.11', 'Bye');
SQL>select * from product
SQL&order by cast(version as int),
SQL&         cast(substring(version from position('.' in version) + 1) as int); 
version    name
========== ==========
1.8        Bar
1.11       Bye
12.23      Foo
23.15      Hello

                  4 rows found

请注意,某些产品有自己的 ANSI SQLsubstring()position(). 如果您遇到麻烦,请尝试substr(version, value)等。

编辑(cast(version as int) 对于包含小数的字符串在 SQL Server(和 Postgres)中将失败 – a_horse_with_no_name )确保只将整数部分转换为整数:

select * from product
order by cast(substring(version from 1 for position('.' in version) -1) as int),
         cast(substring(version from position('.' in version) + 1) as int);
于 2018-10-04T06:27:07.117 回答