对sql2000 的查询结果按ascii码的大小进行排序

coolfeng123 2008-04-03 12:43:17
例如两个值00053和0005-4,对他们进行排序结果按ascii的大小排序,结果应该为
0005-4
00053
但是sql里总是00053在前面
不想使用修改排序规则这个方法,有没有纯用语句的方法?
...全文
207 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjazz 2008-04-03
  • 打赏
  • 举报
回复
减号是比数字小
coolfeng123 2008-04-03
  • 打赏
  • 举报
回复
你这个只能适用于位数为1的字符串
viva369 2008-04-03
  • 打赏
  • 举报
回复
看错
select * from tablename order by ascii(colunname)
viva369 2008-04-03
  • 打赏
  • 举报
回复
select * from tablename order by checksum(colunname)
coolfeng123 2008-04-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fcuandy 的回复:]
SQL codeselect ascii('-'),ascii('4')

DECLARE @t TABLE(v VARCHAR(100))
INSERT @t SELECT '00534'
UNION ALL SELECT '0053-4'

SELECT * FROM @t ORDER BY v

SELECT * FROM @t ORDER BY v COLLATE Albanian_BIN
[/Quote]
正解
fcuandy 2008-04-03
  • 打赏
  • 举报
回复
select ascii('-'),ascii('4')

DECLARE @t TABLE(v VARCHAR(100))
INSERT @t SELECT '00534'
UNION ALL SELECT '0053-4'

SELECT * FROM @t ORDER BY v

SELECT * FROM @t ORDER BY v COLLATE Albanian_BIN
coolfeng123 2008-04-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ojuju10 的回复:]
SQL code

create table #(name varchar(10))
insert into # select '0005-4'
insert into # select '00053'

select * from #
/*
name
----------
0005-4
00053
*/
select * from #
order by name
/*
name
----------
00053
0005-4
*/
select * from #
order by ascii(name)

/*
name
----------
0005-4
00053
*/
[/Quote]


兄台,你在数据插入数据的时候把00053放到前面,你就知道你的这个结果是错的了
ojuju10 2008-04-03
  • 打赏
  • 举报
回复


create table #(name varchar(10))
insert into # select '0005-4'
insert into # select '00053'

select * from #
/*
name
----------
0005-4
00053
*/
select * from #
order by name
/*
name
----------
00053
0005-4
*/
select * from #
order by ascii(name)

/*
name
----------
0005-4
00053
*/

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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