我有一个像这样的SQL Server表:
table(Id, DestId, WeekDay)
WeekDay是包含Monday
,Tuesday
,Wednesday
等值的nvarchar。此处Id
和Weekday
是复合主键。我希望选择查询的结果按WeekDay
顺序排序,即星期一应该在星期二和星期三之前,依此类推。
立即写Select * from table where Id=1001
给出按周末字母顺序排序的记录
答案 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')
注意它在当天是区分大小写的。