在 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 中对星期几进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在sql中怎样获得已知日期是星期几

使用特定列对 Jtable 项目进行排序 - JAVA

用SQL语句计算出给定日期是星期几?

如何在雪花 sql 中使用 date_trunc 更改默认的星期几和时间戳

用SQL语句计算出给定日期是星期几?

mysql判断日期是星期几