Solved

How do I ORDER BY Alpha Numeric?

Posted on 2006-06-20
5
7,825 Views
Last Modified: 2008-01-09
I have a problem with sorting a alpha numeric field.

location_tag (type nvarchar(50))
1
2
3
4
10
11
20
Pad A
Pad B

If I do :
"SELECT location_tag from location ORDER BY location_tag"
1
10
11
2
20
3
4
Pad A
Pad B

How do I make it so it sorts the numeric values as integers then sort the character values?

I have tried:
SELECT location_tag FROM location ORDER BY CASE ISNUMERIC(location_tag) WHEN 1 THEN CONVERT(INT, location_tag) ELSE location_tag END

But it would produce an error:
Syntax error converting the nvarchar value 'Pad A' to a column of data type int.


Any Help is appreciated.
I know that i shouldnt be using a mixed field that contains both alpha and numeric, but that is how the client wants it. Because sometimes the values are numeric, somtimes its characters, sometimes both.

It is when its both that i am encountering a problem.
0
Comment
Question by:RickDai
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 
LVL 17

Expert Comment

by:HuyBD
ID: 16948083
You can create new 2 fields to store int and char

SELECT location_tag,
case when ISNUMERIC(location_tag) =1 then CONVERT(INT, location_tag) else -1 end as fint,
case  when ISNUMERIC(location_tag)<>1 then location_tag else '0' end as fchar
 FROM location ORDER BY fchar,fint
0
 
LVL 17

Accepted Solution

by:
HuyBD earned 125 total points
ID: 16948125
Or

SELECT location_tag
FROM location ORDER BY
case  when ISNUMERIC(location_tag)<>1 then location_tag else '0' end,
case when ISNUMERIC(location_tag) =1 then CONVERT(INT, location_tag) else -1 end
0
 
LVL 28

Expert Comment

by:imran_fast
ID: 16949498
or
SELECT location_tag
FROM location ORDER BY
case  when ISNUMERIC(location_tag) = 1 then cast(location_tag as int) else 999   end
0
 
LVL 32

Expert Comment

by:Brendt Hess
ID: 16954102
....
ORDER BY
    RIGHT(REPLICATE(N' ', 50) + location_tag, 50)

This will right justify your data for ordering.  If the data is:

1
10
11
2
20
3
4
Pad A
Pad B
1A
A1
1X

 the returned set is:

1
2
3
4
10
11
1A
1X
20
A1
Pad A
Pad B
0
 
LVL 2

Author Comment

by:RickDai
ID: 16955202
@HuyBD
worked like a charm. thanks!

@everyone
thanks for your input, much is appreciated.
0

Featured Post

NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
A Stored Procedure in Microsoft SQL Server is a powerful feature that it can be used to execute the Data Manipulation Language (DML) or Data Definition Language (DDL). Depending on business requirements, a single Stored Procedure can return differe…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question