MySQL使用Lpad +浮点字符串排序

时间:2011-12-16 05:16:04

标签: mysql

我有一些在字符串末尾有版本号的字符串。我需要对它们进行排序。

1
5
6
L1
L2
L123
L300
L500
L123.5
L300.5

如果我排除.x行,我可以使用LPAD对它们进行排序,但是版本号让我感到困惑。希望将数据解释如下,以便我可以正确排序,但我失败了。

0001.00
0005.00
0006.00
00L1.00
00L2.00
L123.00
L300.00
L500.00
L123.50
L300.50

1 个答案:

答案 0 :(得分:0)

假设版本号的长度相同,以下内容将为您提供所需内容:

use DBName;
create table versions(
   Id int not null auto_increment,
   primary key(Id),
   ver varchar(20) not null
)TYPE=MyISAM;

insert into versions(ver) values('1');
insert into versions(ver) values('5');
insert into versions(ver) values('6');
insert into versions(ver) values('L1');
insert into versions(ver) values('L2');
insert into versions(ver) values('L123');
insert into versions(ver) values('L300');
insert into versions(ver) values('L500');
insert into versions(ver) values('L123.5');
insert into versions(ver) values('L300.5');

Select CONCAT( LPAD(ver, 4, '0'), 
               Case 
                    When dot ='.' 
                    Then CONCAT('.', SUBSTRING(ver, 6, 1), '0') 
               Else '.00' 
               End
              ) VersionNumber
From
(
   Select ver, SUBSTRING(ver,5,1) dot From versions
) as sub
Order by VersionNumber;

这将给你:

0001.00
0005.00
0006.00
00L1.00
00L2.00
L123.00
L123.50
L300.00
L300.50
L500.00