试试这个:
SELECT column
FROM table
ORDER BY CASE WHEN SUBSTRING(column,LEN(column)-1,1) = '.'
THEN 0
ELSE 1
END, column
这将使那些在第二个是.
到最后的位置首先在订购任何字符串。
编辑:
关于第二个想法,这不会与领先的 'AB' 工作 'ACA' 等试试这个:
SELECT column
FROM table
ORDER BY SUBSTRING(column,1,2), --This will deal with leading letters up to 2 chars
CASE WHEN SUBSTRING(column,LEN(column)-1,1) = '.'
THEN 0
ELSE 1
END,
Column
EDIT2:
要补偿第二个数字集,请使用:
SELECT column
FROM table
ORDER BY substring(column,1,2),
CASE WHEN substring(column,charindex('.',column) + 2,1) = '.' and substring(column,len(column)-1,1) = '.' THEN 0
WHEN substring(column,charindex('.',column) + 2,1) = '.' and substring(column,len(column)-1,1) <> '.' THEN 1
WHEN substring(column,charindex('.',column) + 2,1) <> '.' and substring(column,len(column)-1,1) = '.' THEN 2
ELSE 3 END, column
基本上,这是通过考虑每个条件来强制进行等级排序的手动方法。
如果你的字符串总是用句点分隔的3个数字,你可以用句点作为分隔符,转换为整数和排序根据结果对其进行分析。 –
不幸的是,它可以AB 1.1或AB 1.1。1或AB 1个 – Andyww