我在 MySQL 中對資料進行排序時遇到問題。
我有一個 varchar 列,并且在該列中保存了隨機文本,但我找不到正確排序的方法。
我有以下資料:
| areas |
| ------- |
| 1 |
| 3 |
| null |
| area 01 |
| area 02 |
| 36548 |
| null |
| area 20 |
| area 1 |
| area 4 |
我在 OrderBy 中嘗試了以下解決方案:
OrderBy
IF(column REGEXP '^[A-Z]',
CONCAT(LEFT(column, 1),
LPAD(SUBSTRING(column, 3), 20, '0')
),
CONCAT('@', LPAD(column, 20, '0'))),
LENGTH( column ), column ASC #Or DESC
但結果是錯誤的:
| areas |
| ------- |
| null |
| null |
| 36548 |
| area 01 |
| area 02 |
| area 1 |
| area 20 | #Problem
| area 4 |
如果我將順序更改為 DESC,它將首先保留空資料,而不是最后保留。
請求:無論輸入的資料如何,我都希望按照字母數字順序保持正確的順序。
uj5u.com熱心網友回復:
也許應用了一些邏輯order by?
order by
case
when areas is null then 'zzzz'
/* OTHER CONDITIONS */
else areas
end
uj5u.com熱心網友回復:
如果您需要最后出現 null,請在 mysql 中嘗試:ORDER BY COALESCE(areas, 999999);
SELECT areas
FROM Areas_table
ORDER BY COALESCE(areas, 999999);
uj5u.com熱心網友回復:
我知道您需要按數字順序排序并將空值放在最后?必須替換空值,并且應從行中洗掉單詞“area”并在左側填充零。
SELECT
lpad(replace (coalesce(areas, lpad('',20,'Z')),'area ',''), 20, '0') as sorting_criteria,
areas
FROM sometable
ORDER BY lpad(replace (coalesce(areas, lpad('',20,'Z')),'area ',''), 20, '0')
;
查看示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422663.html
標籤:
上一篇:電子郵件格式Oracle
