SQL Server SELECT查询按子串排序

时间:2012-03-18 11:43:17

标签: sql-server

我在SQL Server表中有一列包含以下行:

MyColumn:C1_xxx1,C2_xxx1,C3_xxx1,C1_xxx2,C1_xxx3,C3_xxx2

这是一个text列,其中包含具有以下格式的字符串:CY_mystring其中Y是1到5之间的数字,后跟'_'字符,然后是mystring可以有任何价值。

有没有办法让select这个列按照以下顺序返回:

C1_xxx1
C1_xxx2
C1_xxx3
......
C1_xxxn
C2_xxx1
......
C2_xxxn
C3_xxx1
.......
C3_xxxn

CY_子字符串订购。

谢谢

2 个答案:

答案 0 :(得分:4)

这应该这样做..(首先按前两个字符排序,然后按最后一个字符排序(假设最终n总是一位数))

SELECT
   Column1
FROM
   TABLENAME
ORDER BY
   LEFT(Column1,2) ASC, 
   RIGHT(Column1,1) ASC

答案 1 :(得分:0)

你说Y是一个从1到5的数字,它总是一个字符长。假设格式为xY_xxxZ,您可以在Y然后Z订购,例如:

order by 
        substring(MyColumn,2,1) -- Second digit
,       right(MyColumn,1) -- Last digit

如果Z可能超过一个字符(即10或更高),您可以使用pathindex来确定结尾的位数:

order by
        substring(MyColumn,2,1) -- Second digit
,       right(MyColumn, patindex('%[^0-9]%', reverse(MyColumn))-1) -- Digits at end