0

我有一个这样的领域:

  • 1月~3月
  • 12月~1月</li>
  • 3月~12月</li>
  • 4月~12月</li>
  • 9月~8月</li>
  • 6月~7月</li>

我如何对该列进行排序:

  • 4月~12月</li>
  • 6月~7月</li>
  • 9月~8月</li>
  • 12月~1月</li>
  • 1月~3月
  • 3月~12月</li>

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

4

2 回答 2

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
于 2013-10-24T15:34:05.233 回答
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 小提琴

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

于 2013-10-24T15:46:15.853 回答