是否可以从选定的字段值或mysql中的if语句定义Order By的排序方向?

时间:2010-12-07 21:55:39

标签: sql mysql sql-order-by

比如说我有这样的查询:

select table1.somedate AS date1, IF(3 = :some_query_parameter, ASC, DESC) AS SortOrder FROM table1 ORDER BY date1 SortOrder;

我要做的是将SortOrder字段中的值放入ORDER BY的ASC或DESC方向,以便根据字段的值按升序或降序排序。

我的猜测是,这不可能做到,但我想我还是会问。

1 个答案:

答案 0 :(得分:1)

如果您尝试根据变量对ASC或DESC顺序中的日期进行排序,可以尝试在ORDER BY子句中使用CASE语句:

SELECT table1.somedate AS date1
FROM table1
ORDER BY 
CASE WHEN :some_query_parameter = 3 THEN table1.somedate ELSE '1/1/1900' END ASC,
CASE WHEN :some_query_parameter <> 3 THEN table1.somedate ELSE '1/1/1900' END DESC

将仅使用上面的一个ORDER BY子句,另一个将始终评估为公共值。 ELSE子句中的值必须计算为与table1.somedate相同的数据类型。