I know that this question has been asked in various forms but my requirement happens to be a bit different.
Suppose I have a table that contains data as follows:
ID NAME VALUE
-----------------------------
1 ABC-2-2 X
2 PQRS-1-3 Y
3 ABC-3-2 Z
4 PQRS-1-4 A
5 PQRS-3-4 B
6 MNO-2-1 C
7 AAA-1 D
8 BBB-2 E
9 CCC-3 F
Now, the output that I’m expecting should look something like this:
ID NAME VALUE
-----------------------------
7 AAA-1 D
2 PQRS-1-3 Y
4 PQRS-1-4 A
8 BBB-2 E
6 MNO-2-1 C
1 ABC-2-2 X
9 CCC-3 F
3 ABC-3-2 Z
5 PQRS-3-4 B
Note that this is not a direct alpha-numeric sort. Instead, the value before the first “-” is ignored and the fields are sorted on what is after the first “-” in the name.
I’m not very familiar with PL/SQL and any kind of help on this would be appreciated.
Thanks.
PS: Note that this should work on both Oracle and MySQL.
For your example this would suffice (Oracle syntax):
If the number of characters before the first hyphen can vary, you can do this (again Oracle syntax):
However that won’t work if you have codes like:
and expect
AAA-10-1to appear afterAAA-9-1. Then you will need to parse it further:(NB I have used LPAD(x,10,’0′) to turn a value like ‘1’ into ‘0000000001’ and so on, rather than use TO_NUMBER since this could fail if there are any non-numerics in your data.)
Example:
Output:
And if AAA-1 should come first: