在SQL中对星期几进行排序

时间:2012-02-11 03:46:57

标签: sql ms-access sql-order-by

我有一个Access数据库我正在使用VB .NET中的SQL查询。我正在查询的表中有一个名为“Day”的列,它将日期存储为Access中的文本数据类型。我需要选择字段中的所有唯一实例,因此我正在使用:

SELECT Day FROM Slot GROUP BY Day

但是当我按时间顺序需要时,这会按字母顺序返回日期。现在假设它可以采取的唯一可能的值是“星期一”,“星期二”,“星期三”,“星期四”和“星期五”,你会建议你做什么来正确排序?

编辑:该表名为Slot,有三列; SlotNumber(自动编号),日(文本),SlotTime(文本)。一个例子可能是:

SlotNumber: 6

日:星期一

SlotTime:下午2:40

2 个答案:

答案 0 :(得分:3)

如果你坚持使用数据,我建议你添加一个ORDER BY子句。在ORDER BY子句中,您需要将每个不同的值映射到数值。

例如,使用IIf

SELECT Slot.Day
FROM Slot
GROUP BY Slot.Day
ORDER BY IIf(Slot.Day = "Monday", 1,
         IIf(Slot.Day = "Tuesday", 2,
         IIf(Slot.Day = "Wednesday", 3,
         IIf(Slot.Day = "Thursday", 4,
         IIf(Slot.Day = "Friday", 5)))));

例如,使用SWITCH

SELECT Slot.Day
FROM Slot
GROUP BY Slot.Day
ORDER BY SWITCH(Slot.Day = 'Monday', 1,
                Slot.Day = 'Tuesday', 2,
                Slot.Day = 'Wednesday', 3,
                Slot.Day = 'Thursday', 4,
                Slot.Day = 'Friday', 5);

答案 1 :(得分:1)

你不能以你想要的方式“排序”它们。无论如何,为什么要使用文本值?执行此操作的标准方法是使用数值表示日期; 0 =星期日,1 =星期一,2 =星期二等等。因此,您将拥有值为1-5的int字段。然后你可以正确排序。