比较两个版本号的跨平台语法是什么?一个版本有两个部分:主要版本和次要版本,它们都是整数。
要比较两个版本,请首先比较它们的主要版本。如果主要版本相同,请比较其次要版本。
例如,
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语法?
具体来说,我希望它可以在以下平台上工作:
答案 0 :(得分: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 SQL版本substring()
和position()
。如果您遇到麻烦,请尝试substr(version, value)
等。
编辑:(对于包含小数的字符串,在SQL Server(和Postgres)中,cast(版本为int)将失败– 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);