【问题标题】:Is it possible to select a specific ORDER BY in SQL Server 2008?是否可以在 SQL Server 2008 中选择特定的 ORDER BY?
【发布时间】:2012-04-18 11:07:47
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 使用 DATEPART(weekday,@dtDate) 函数会有帮助吗?它会给你一周中的日子作为数字

标签: sql-server-2008 sql-order-by


【解决方案1】:

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

不管怎样,就这样做吧:

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

【讨论】:

  • 您好,您的解决方案有效,非常感谢!那是学到的另一件事!我今天没有票了,但是当他们刷新时,我会投票给你的答案。我能问一下你对我做事的方式很讨厌是什么意思吗,我觉得这不是最好的方法。成为初学者的乐趣!
  • 要么使用 DATETIME,要么使用整数表示工作日,例如0 = 星期六,1 = 星期一,2 = 星期二,等等。这样,您可以自然地对字段进行排序,或者按:ORDER BY DATEPART(WEEKDAY, DateTimeFieldHere),或者这样:ORDER BY DateTimeFieldHere
  • 如果此时重新设计表格不适合您,只需为 CASE WHENs 添加计算列。这样,您可以对可索引字段进行排序。计算列可以加快排序或过滤。例如mssqltips.com/sqlservertip/1682/…blog.sqlauthority.com/2010/08/13/…
  • 重新设计表格不是问题,我打算尽可能正确地这样做,这就是为什么您的所有建议都很重要。它肯定会派上用场!谢谢! :)
  • 这是一个很好的解决方案!对我来说 - 至少 - 谁需要通过每次将具有特定值的元组放在枚举中的第一个来进行排序。例如,借用上面的例子,我需要在某个时间点按“星期五”、“星期四”、“星期三”等顺序对元组进行排序,而“星期日”、“星期一”、“星期二”,在另一个。我什至必须处理复杂的订单,例如:“星期四”、“星期一”、“星期日”、“星期三”……等等。所以,再次感谢您提供的出色解决方案!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多