2014-04-02 145 views
2

我正在尝试查询并对列进行排序,但没有多少运气。我的数据看起来像这样,并与前面的“WP”一致。对包含文本和数字的字符串进行排序

应显示为

WP1-WP2 
    WP2-WP3 
    WP10-WP11 
    WP10-WP12 

实际显示为

WP1-WP2 
    WP10-WP11 
    WP10-WP12 
    WP2-WP3 

我已经尝试适应在这里的没有成功发现了几个答案。

问题是如何排列这个列表,因为它应该?

编辑:我在查询中使用不同的,不知道这是否会影响我在

+0

@juergen d谢谢,我是这样做的:) –

+0

这是你的数据库的中间? SQL Server,MySql,Oracle等。 – TechDo

+0

MySQL根据000webhost的网站 –

回答

2

试试这个问题,

select * 
from myStringSorting 
order by Cast(Replace(Substring(mycol,0,CHARINDEX('-',mycol)),'WP','') as Int) asc 
     ,Cast(Replace(Substring(mycol,CHARINDEX('-',mycol) + 1,LEN(mycol)),'WP','') as Int) asc 

看看这个链接,http://sqlfiddle.com/#!3/ca45f/5

用DISTINCT,

With CTE as 
(
select distinct mycol 
from myStringSorting 
) 
select * from CTE 
order by Cast(Replace(Substring(mycol,0,CHARINDEX('-',mycol)),'WP','') as Int) asc 
     ,Cast(Replace(Substring(mycol,CHARINDEX('-',mycol) + 1,LEN(mycol)),'WP','') as Int) asc 

用DISTINCT,没有CTE,使用sub查询,

Select a.mycol from 
(
select distinct mycol 
from myStringSorting 
)as a 
order by Cast(Replace(Substring(a.mycol,0,CHARINDEX('-',a.mycol)),'WP','') as Int) asc 
     ,Cast(Replace(Substring(a.mycol,CHARINDEX('-',a.mycol) + 1,LEN(a.mycol)),'WP','') as Int) asc 
+0

语法问题,不知道使用什么版本的SQL,使用000webhost。 –

+0

更正,请检查。 – AK47

+0

SQL查询:文档 SELECT DISTINCT WP FROM btsec WHERE估算值= 'IBH39WMT' ORDER BY角色(替换(SUBSTRING(WP,0,CHARINDEX( ' - ',WP )), 'WP', '')AS Int)ASC,Cast(替换(子字符串(WP,CHARINDEX, ' 0,30 MySQL说:文档 #1064 - 你的SQL语法有错误; (WP,CHARINDEX(' - ',WP)+ 1,LEN(WP)),'WP' ,'')in'at line 1 –

1

另一种方法

select * from myStringSorting 
order by len(mycol),mycol 
+0

我试过这个, (#)#1547 - mysql.proc的列数是错误的,预计20,找到了16.该表可能已损坏' –

+0

'LENGTH(mycol),mycol'工程,但'LEN(mycol),mycol'在服务器上的SQL看起来好像是 –

+0

yes LENGTH会起作用 – Madhivanan

相关问题