2012-04-18 46 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或使用表示層中的功能。這樣做的性能成本不合理的單獨存儲它恕我直言。而且您仍應該能夠使用本機日期/日期時間數據正確排序。

相關問題