15

我有一个包含日期和时间的表,day 列,可以输入任何 7 天,并且它们设置为 data type varchar。由于此表包含客户的预订时间,我想从表中选择 id 匹配的所有日期,并且我想按星期一至星期日排序。我希望我可以在这个查询中添加一些东西来手动选择结果返回的顺序,如下所示:

select * 
from requirements 
where Family_ID = 1 
ORDER BY Day, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday

这当然行不通,但我只是想展示我想要实现的目标。客户不一定每天都需要帮助,我只是想显示他们预订的日期。

按 DESC 和 ASC 排序对一周中的几天没有帮助,我将不胜感激有关如何实现这一点的任何提示。

谢谢。

4

2 回答 2

38

嗯..这很讨厌,这些日子被逐字存储为“星期一”、“星期二”等?

无论如何,只需这样做:

SELECT * 
FROM Requirements
ORDER BY 
     CASE Day 
     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
于 2012-04-18T11:12:05.427 回答
1

恕我直言,您没有任何理由存储Monday, Tuesday, etc...如果您存储日期或日期时间值,您可以随时在需要时从该数据中提取工作日名称 -DATENAME在查询中使用或使用您的演示层。这样做的性能成本并不能证明单独存储它恕我直言。而且您应该仍然能够使用本机日期/日期时间数据正确排序。

于 2012-04-18T12:06:43.167 回答