我在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_
子字符串订购。
谢谢
答案 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