2012-04-18 47 views
8

我有保存日期和时间,天塔,可以有任何的进入它的七天表,将它们设置为数据类型varchar。由于此表格包含客户的预订时间,因此我希望从ID匹配的表格中选择所有日期,并且我想按星期一至星期天的日期进行排序。我希望我可以补充一下这个查询手动选择结果回来,像这样的顺序:是否可以在SQL Server 2008中选择特定的ORDER BY?

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

这当然不工作,但我只是想证明什么,我想要的目的。客户不一定每天都需要帮助,我只是想显示他们预订的日子。

按照DESC和ASC排序并不能帮助您节省一周的时间,我很乐意提供关于如何做到这一点。

谢谢。

+1

会使用DATEPART(weekday,@ dtDate)函数吗?它会给你一周的日子为数字 – 2012-04-18 11:11:01

回答

26

嗯..这就是讨厌,天存储为逐字“星期一”,“星期二”,等等?

总之,只要做到这一点:

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 
+0

嗨你的解决方案工作,非常感谢你!这是另一个学到的东西! 我今天没有投票了,但当他们刷新时,我会投票答复你的答案。 我可以问一下你的意思吗?我的做法很糟糕,我觉得它不是最好的办法。 作为初学者的乐趣! – deucalion0 2012-04-18 11:15:28

+1

可以使用DATETIME,也可以每周使用一个整数,例如0 =周六,1 =周一,2 =周二,等等。这样一来,就可以自然排序的字段,或者通过:'ORDER BY DATEPART(星期,DateTimeFieldHere)',或这样的:'ORDER BY DateTimeFieldHere' – 2012-04-18 11:34:08

+1

如果再在这个时候设计表格并不是您的选择,只需为这些'CASE WHENs'添加一个计算列。这样,你可以在可索引字段上排序。计算列可以加快排序或过滤。例如http://www.mssqltips.com/sqlservertip/1682/using-computed-columns-in-sql-server-with-persisted-values/ http://blog.sqlauthority.com/2010/08/13/sql- server-computed-column-and-performance-part-3/ – 2012-04-18 11:49:11

1

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

相关问题