问一下一个排序的问题

sleight 2006-09-15 03:28:26
如果一列是varchar型, 里面 中文+数字+中文...
order by 的时候由于数字作为字符处理,排序会出现1,10,11,...2,20,21...,3,

不知道如何解决,如:北京路25号,北京路2号,北京路2号群光百货1楼,北京路2号群光百货2楼,北京路2号群光百货10楼


自己写不出来
...全文
223 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDMN 2006-09-16
  • 打赏
  • 举报
回复
可能这样更准确点

select * from 你的表名
order by left(地址字段名,PATINDEX('%[0-9]%',地址字段名)-1), --北京路
dbo.fn_GetFirstNum(地址字段名) -- 25


CSDMN 2006-09-16
  • 打赏
  • 举报
回复
写个函数嘛

create function fn_GetFirstNum(
@s varchar(300)
)
returns int
as
begin
if PATINDEX('%[0-9]%',@s)>0
return cast(left(stuff(@s,1,PATINDEX('%[0-9]%',@s)-1,''),PATINDEX('%[^0-9]%',stuff(@s,1,PATINDEX('%[0-9]%',@s)-1,''))-1) as int)
return 0
end
go

你的可以
select * from 你的表名
order by dbo.fn_GetFirstNum(地址字段名)


Well 2006-09-16
  • 打赏
  • 举报
回复
加上一个标志符的,要是不加,即使实现了也好复杂
flyskylf 2006-09-16
  • 打赏
  • 举报
回复
加一个标志列
dawugui 2006-09-15
  • 打赏
  • 举报
回复
没法搞,另外再加一列又如何区分他具体的内容?
junmail 2006-09-15
  • 打赏
  • 举报
回复
另外再加一列比较好!
panjinfu80 2006-09-15
  • 打赏
  • 举报
回复
group by
Alexandria 2006-09-15
  • 打赏
  • 举报
回复
不太可能,最好加上一列OrderID,单独标记一条路上的不同门牌号

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧