【发布时间】:2011-11-03 09:14:42
【问题描述】:
我正在创建一个存储过程,我正在向其中动态传递“订单”,如下所示:
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
如您所见,我正在使用 CONCAT 将所有非 VARCHAR 字段转换为 VARCHAR,因为混合可能的订单类型不起作用,如 http://www.4guysfromrolla.com/webtech/010704-1.shtml 所述。
我的问题是现在按名称排序有效,但非字符串订单返回为 1,10,11,2,3,4,5,6,7,8,9。等等
有没有办法使用混合数据类型动态排序,并且仍然以正确的顺序返回整数、日期时间等。
【问题讨论】:
标签: mysql sql stored-procedures