динамический порядок хранимых процедур mysql со смешанными типами

Я создаю хранимую процедуру, в которую я передаю "порядок" динамически следующим образом:

CREATE PROCEDURE `getStuff`(IN orderSQL VARCHAR(100))
BEGIN
    SELECT id, name, createdate
    FROM mytable
    ORDER BY
        CASE WHEN orderSQL='id_desc' THEN CONCAT(id, '') END DESC,
        CASE WHEN orderSQL='id_asc' THEN CONCAT(id, '') END ASC,
        CASE WHEN orderSQL='name_desc' THEN name END DESC,
        CASE WHEN orderSQL='name_asc' THEN name END ASC,
        CASE WHEN orderSQL='date_desc' THEN CONCAT(createdate, '') END DESC,
        CASE WHEN orderSQL='date_asc' THEN CONCAT(createdate, '') END ASC
END

Как видите, я конвертирую все не Поля VARCHAR в VARCHAR с использованием CONCAT, потому что смешивание возможных типов заказов не работает, как описано здесь http://www.4guysfromrolla.com/webtech/010704-1.shtml .

Моя проблема в том, что теперь сортировка по имени работает, но порядки без строк возвращаются как 1,10,11,2,3,4,5,6,7,8,9. и т. д.

Есть ли способ использовать динамическое упорядочение смешанных типов данных и по-прежнему возвращать в правильном порядке для целых чисел, времени и т. д.

5
задан ricick 25 August 2011 в 05:57
поделиться