2016-11-08 232 views
0

我有一個字符串,如排序數字串字母

70x100 CM 
70x140 CM 
70x70 CM 
72x120 CM 
70x130x70 CM 
70x75x70 CM 
72x72 CM 

當我想在這個順序排序:

70x70 CM 
70x75x70 CM 
70x100 CM 
70x130x70 CM 
70x140 CM 
72x72 CM 
72x120 CM 

這是我的代碼:

ORDER BY CAST(CAST(eaov.value AS DECIMAL(3,0)) as UNSIGNED INTEGER), eaov.value 

任何想法?

+3

將寬度,深度和SI單位存儲在單獨的列中。 – Strawberry

+1

...整數類型列。 – jarlh

回答

2

未成年MOD由草莓答案。這改變了「釐米」的一系列X0,以確保總有3個維度的排序順序

SELECT * 
FROM eaov 
ORDER BY CAST(SUBSTRING_INDEX(REPLACE(eaov.value, ' CM', 'x0x0x0'), 'x', 1) as UNSIGNED INTEGER), 
     CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(eaov.value, ' CM', 'x0x0x0'), 'x', 2), 'x', -1) as UNSIGNED INTEGER), 
     CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(eaov.value, ' CM', 'x0x0x0'), 'x', 2), 'x', -1) as UNSIGNED INTEGER) 

性能會不會是其強項。

1

我沒有認真提倡這是一個解決方案 - 但作爲一項臨時措施(和容易適應標準化設計的目的)...

SELECT * FROM my_table 
    ORDER 
    BY substring_index(string,'x',1) + 0 
     , substring_index(substring_index(string,'x',-1),' ',1) + 0 
+0

不以該字符串工作 70X100 CM 70x140釐米 70x70釐米 72x120釐米 70x130x70 CM 70x75x70 CM 最高72x72釐米 – maurizio

+0

@maurizio除了是沒用的,像聲明 「不工作」 是在完全不能接受所以。 – Strawberry