工作日对表数据进行排序

时间:2014-07-03 06:50:21

标签: sql sql-server sql-server-2008

我有一个像这样的SQL Server表:

table(Id, DestId, WeekDay) WeekDay是包含MondayTuesdayWednesday等值的nvarchar。此处IdWeekday是复合主键。我希望选择查询的结果按WeekDay顺序排序,即星期一应该在星期二和星期三之前,依此类推。

立即写Select * from table where Id=1001给出按周末字母顺序排序的记录

4 个答案:

答案 0 :(得分:2)

此处的解决方案:http://dbaspot.com/sqlserver-faq/393109-order-day-week.html

您必须在SQL语句中创建一个案例结构,如下所示:

select *
from table
ORDER BY case WeekDay when 'Monday' then 1
    when 'Tuesday' then 2
    when 'Wednesday' then 3
    when 'Thursday' then 4
    when 'Friday' then 5
    when 'Saturday' then 6
    when 'Sunday' then 7
    else 8
END
;

答案 1 :(得分:2)

你可以试试这个:

SELECT * FROM Table ORDER BY CHARINDEX(LEFT(WeekDay,3),'MonTueWedThuFriSatSun')

CHARINDEX(LEFT(WeekDay,3),'MonTueWedThuFriSatSun')将返回索引位置。如果您想从星期日排序,您可以将字符串更改为'SunMonTueWedThuFriSat'

答案 2 :(得分:1)

这应该有效:

Select
 CASE WeekDay
   WHEN 'Monday' THEN 1
   WHEN 'Tuesday' THEN 2
   WHEN 'Wednesday' THEN 3
   WHEN 'Thursday' THEN 4
   WHEN 'Friday' THEN 5
   WHEN 'Saturday' THEN 6
   WHEN 'Sunday' THEN 7 End
 AS SortWeekday
FROM [TABLE]
WHERE Id = 1001
OrderBy SortWeekday

答案 3 :(得分:0)

将工作日作为表格中的纯文本并不是一个好习惯。您应该使用smallint来存储工作日值。说完了。这是一个解决方案。

通过制作一个脚本来测试不同的组合,我想出了工作日和其他两个角色的组合。

SELECT WeekDay 
FROM
  (VALUES('Monday'),('Tuesday'),('Wednesday'),('Thursday'),
         ('Friday'),('Saturday'),('Sunday')) x(WeekDay)
ORDER BY HASHBYTES('SHA1',WeekDay + 'g2')

注意它在当天是区分大小写的。