我有示例数据
SMMP022011304196
SMMP022011304199
SMMP022011304197
SMMP022011304193
SMMP022011304195
SMMP022011304198
SMMP022011304192
SMMP0220113041910
SMMP022011304191
SMMP022011304194
如果我使用SELECT myfield from mytable order by myfield DESC
我造成这样的
SMMP022011304199
SMMP022011304198
SMMP022011304197
SMMP022011304196
SMMP022011304195
SMMP022011304194
SMMP022011304193
SMMP022011304192
SMMP0220113041910
SMMP022011304191
请帮忙做的结果是这样的:
SMMP0220113041910
SMMP022011304199
SMMP022011304198
SMMP022011304197
SMMP022011304196
SMMP022011304195
SMMP022011304194
SMMP022011304193
SMMP022011304192
SMMP022011304191
只是排序字段的长度,然后用长度相等的值:
SELECT myfield from mytable order by
LENGTH(myfield) DESC,
myfield DESC
如果数据总是有SMMP在前面,你可以使用如下:
ORDER BY LPAD(REPLACE(myfield,'SMMP',''),15,'0') desc;
该方法的逻辑是忽略在前面的4的炭和仅次于排序数字的数字。
继我先前的评论,排序如下: -
SELECT myfield
FROM mytable
ORDER BY SUBSTRING(myfield, 1, 4) DESC, cast(SUBSTRING(myfield, 5) AS unsigned) DESC
请注意,这仅适用于如果你的领域是固定格式的,随后用NUMERICS 4个字符
这是工作的罚款。下面的代码是SQL Server 2008 R2的工作:
SELECT
myfield
FROM mytable
ORDER BY
LEN(myfield) DESC
,myfield DESC