我有一个列,其中的数据有字母和数字。
例如:
1 name
2 names ....
100 names在对数据进行排序时,它没有正确地排序,如何解决这个问题?我提出了一个请求,但没有正确排序。
select name_subagent
from Subagent
order by
case IsNumeric(name_subagent)
when 1 then Replicate('0', 100 - Len(name_subagent)) + name_subagent
else name_subagent
end

发布于 2019-12-06 05:13:07
这应该能行
select name_subagent
from Subagent
order by CAST(LEFT(name_subagent, PATINDEX('%[^0-9]%', name_subagent + 'a') - 1) as int)发布于 2019-12-06 04:21:19
该表达式将发现字母在字符串中的第一个出现,并假定该位置之前的任何内容都是数字。您需要根据您的需要调整此语句,因为显然您的数据不是拉丁文字符。只要稍加调整,你就能完全实现你想要的目标:
select
name_subagent
from
Subagent
order by
CAST(SUBSTRING(name_subagent,0,PATINDEX('%[A-Z]%',name_subagent)) as numeric)注意,'%[A-Z]%'表达式。这将只查找字符串中字母的第一次出现。
我没有考虑特殊的字符,如'!','#‘等等。这是你可能想玩和适应你的需要的一点。
https://stackoverflow.com/questions/59206595
复制相似问题