SQL:具有起始值的order by语句

时间:2013-10-24 15:29:30

标签: sql sql-order-by

我有一个这样的字段:

  • 1月〜3月
  • 12月〜1月
  • 3月〜12月
  • 4月〜12月
  • 9月〜8月
  • 6月〜7月

如何对以下列进行排序:

  • 4月〜12月
  • 6月〜7月
  • 9月〜8月
  • 12月〜1月
  • 1月〜3月
  • 3月〜12月

从4开始到3结束(4-5-6-7-8-9-10-11-12-1-2-3)(月)

2 个答案:

答案 0 :(得分:0)

 order by case when col < 4 then 1 else 0 end, col

或者它确实是一个varchar

 order by case when convert(int,substring(col,1,1)) < 4 then 1 else 0 end, col

答案 1 :(得分:0)

这样做,您需要将字段的数字部分分开,并使用CASE语句:

SELECT *
FROM Table1
ORDER BY CASE WHEN CAST(LEFT(Col1, CHARINDEX('月',Col1)-1)AS INT) >= 4  THEN 1 END DESC
        ,CAST(LEFT(Col1, CHARINDEX('月',Col1)-1)AS INT)

演示:SQL Fiddle

上面的SQL Server语法可能因数据库而异。