sql - MySQL sort values that contain two numbers separated by "x" -


i have values consisting of decimal numbers , alphabets:

2mm 3x4mm 2.5x5mm 1.7x6mm 1.7x9mm 1.6x5mm 3mm 5mm 3.5x5mm 3.5x8mm 10x7mm 

note: x - means alphabet x. want sort them ascending result looks like:

1.6x5mm 1.7x6mm 1.7x9mm 2mm 2.5x5mm 3mm 3x4mm 3.5x5mm 3.5x8mm 5mm 10x7mm 

so need both decimal , alphanumerical sorting.

you need use mysql string functions. example, can use locate , substring_index functions separate 2 numbers:

/* create table test (value varchar(100) default null); insert test (value) values     ('2mm'),     ('3x4mm'),     ('2.5x5mm'),     ('1.7x6mm'),     ('1.7x9mm'),     ('1.6x5mm'),     ('3mm'),     ('5mm'),     ('3.5x5mm'),     ('3.5x8mm'),     ('10x7mm'); */  select     value,      1 * case when locate('x', value) > 0 substring_index(value, 'x', 1) else substring_index(value, 'mm', 1) end x,     1 * case when locate('x', value) > 0 substring_index(substring_index(value, 'x', -1), 'mm', 1) else null end y test order x, y 

for illustration have placed calculations inside select clause instead of order clause. result:

+---------+------+------+ | value   | x    | y    | +---------+------+------+ | 1.6x5mm |  1.6 |    5 | | 1.7x6mm |  1.7 |    6 | | 1.7x9mm |  1.7 |    9 | | 2mm     |    2 | null | | 2.5x5mm |  2.5 |    5 | | 3mm     |    3 | null | | 3x4mm   |    3 |    4 | | 3.5x5mm |  3.5 |    5 | | 3.5x8mm |  3.5 |    8 | | 5mm     |    5 | null | | 10x7mm  |   10 |    7 | +---------+------+------+ 

Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -