Francis Harvey
HARVEYF1 at WESTAT.com
Sun Oct 31 13:06:44 CST 2004
Billy,
Perhaps this code will give you some ideas to build on as I imagine
your problem is more complex than your example suggests:
select the_value
from #the_table
order by
case
when ascii(right(the_value,1)) between 48 and 57
then cast(substring(the_value,2,len(the_value) - 1) as int)
else cast(substring(the_value,2,len(the_value) - 2) as int)
end, the_value
Francis R Harvey III
WB 303, (301)294-3952
harveyf1 at westat.com
> -----Original Message-----
> From: dba-sqlserver-bounces at databaseadvisors.com
> [mailto:dba-sqlserver-bounces at databaseadvisors.com] On Behalf
> Of Billy Pang
> Sent: Friday, October 29, 2004 8:35 PM
> To: dba-SQLServer at databaseadvisors.com
> Subject: [dba-SQLServer] sorting problem
>
>
> Hello:
>
> I have a table that contains one column with the following six values:
>
> a1
> a2
> a21
> a10x
> a2a
> a10
>
> Currently if that column is sorted, it is sorted this way:
>
> a1
> a10
> a10x
> a2
> a21
> a2a
>
> But I want it to be sorted this way:
>
> a1
> a2
> a2a
> a10
> a10x
> a21
>
> (note: a2a comes before a10, a21 goes after a10x, etc...ergo,
> letters come
> before numbers, contrary to their ascii values)
>
> Is it possible or is it a pipe dream? Below is copy of code.
>
> Thanks in advance,
> Billy
>
> /* cut here */
> use tempdb
> create table #the_table(the_value varchar(10));
> insert into #the_table(the_value) values('a1');
> insert into #the_table(the_value) values('a2');
> insert into #the_table(the_value) values('a21');
> insert into #the_table(the_value) values('a10x');
> insert into #the_table(the_value) values('a2a');
> insert into #the_table(the_value) values('a10');
> select * from #the_table order by the_value
> drop table #the_table;
> /* cut here */