我需要按日期排序表(降序),但表中的所有列都是varchar
,所以我需要操縱數據以便正確排序。當列聲明時按日期排序mysql表varchar
date sales
10/09/2014 100
13/09/2014 250
30/08/2014 200
是否有可能不改變表格?所以結果如下,最新的日期在先?
date sales
13/09/2014 250
10/09/2014 100
30/08/2014 200
像僞
SELECT * FROM table ORDER BY (CONCAT(REGEXP(date, '[0-9]{4}'),
REGEXP(date, '/[0-9]{2}/'), REGEXP(date, '^[0-9]{4}/')) DESC
我想我需要使用substring_index
莫名其妙,因爲regexp
剛剛返回1或0,沒有找到實際的價值。
MySQL有一個數量的日期和時間功能,可以幫助這一點,但真正的解決辦法是重新設計你的表,這樣的列有相應的數據類型。即使你通過這個問題,糟糕的設計也會再次咬你。 – 2014-09-27 01:18:07
如果此列存儲爲'DATE'而不是'VARCHAR',那麼MySQL將能夠使用**索引**進行ORDER BY操作,按順序返回行,而不需要使用「使用filesort」對來自表達式的值進行操作。同樣的原則適用於範圍謂詞,獲取所有行的一個月......在DATE列中,我們可以編寫一個查詢來啓用索引範圍掃描操作,使用VARCHAR這樣的列,它將需要一個表達式來評估表中的每一個翻轉行。 – spencer7593 2014-09-27 02:03:20