在 SQL 中对星期几进行排序
Posted
技术标签:
【中文标题】在 SQL 中对星期几进行排序【英文标题】:Sort Days of the Week in SQL 【发布时间】:2012-02-11 03:46:56 【问题描述】:我有一个 Access 数据库,我正在使用 VB .NET 中的 SQL 进行查询。我正在查询的表有一个名为“Day”的列,其中将日期存储为 Access 中的文本数据类型。我需要选择该字段中的所有唯一实例,因此目前正在使用:
SELECT Day FROM Slot GROUP BY Day
但是当我需要它们时,这会按字母顺序返回日期。现在假设它可以采用的唯一可能值是“Monday”、“Tuesday”、“Wednesday”、“Thursday”和“Friday”,您建议如何正确排序?
编辑:该表称为Slot,有三列; SlotNumber(自动编号)、Day(文本)、SlotTime(文本)。一个例子可能是:
插槽号: 6
日期:星期一
SlotTime: 2:40PM
【问题讨论】:
您能否至少显示一些存储在Day
表中的记录?
您确定在此页面底部没有回答按钮吗?
我确实有一个回答按钮,但我无法在 8 小时内回答我自己的问题。声望不够。
我猜就是这样。当你有机会时,你应该修复它(通过编辑问题中的答案并将其添加为答案)。很高兴你找到了适合你的东西!
【参考方案1】:
如果您不了解数据,我建议您添加 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);
【讨论】:
@todda.speot.is 感谢您指出一个我明显错过的重要细节。我已经更新了使用 IIf 语法而不是 CASE 的答案。【参考方案2】:您无法以您想要的方式“排序”它们。无论如何,您为什么要使用文本值?执行此操作的标准方法是使用数值来表示天数; 0=星期日,1=星期一,2=星期二,等等。所以你会有一个 int
值 1-5 的字段。然后你就可以正确排序了。
【讨论】:
好的,谢谢。我将它用作文本字段,因为我将该字段用作 VB .NET 中标签的文本属性。哦,我想我可以将其转换为数字字段并在新表中查找日期。再次感谢! 您不需要表格来查找值。事实上,我认为你可以使用一个枚举。 (或者您可以轻松创建一个) @todda.speot.is 哎呀。完全错过了这是访问;对,史蒂文的回答不行。以上是关于在 SQL 中对星期几进行排序的主要内容,如果未能解决你的问题,请参考以下文章