2012-04-18 3 views
8

曜日と時刻を保持するテーブルがあり、その日の列に7日間入力することができ、データ型は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(平日、@ dtDate)関数を使用しますか?それはあなたに数字のような曜日を与えるでしょう –

答えて

26

うーん..それは厄介で、曜日は「月曜日」、「火曜日」などのように逐語的に保存されますか?あなたがMonday, Tuesday, etcを格納するためにどのような理由を持っていない私見...

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

+1

DATETIMEを使用するか、週単位の整数を使用します(例: 0 =土曜日、1 =月曜日、2 =火曜日などです。このように、フィールドの並べ替えは、 'ORDER BY DATEPART(WEEKDAY、DateTimeFieldHere)'または 'ORDER BY DateTimeFieldHere'のどちらかで行うことができます。 –

+1

この時点でテーブルを設計することはあなたの選択肢ではありません。それらの 'CASE WHEN 'の計算カラムを追加するだけです。これにより、インデックス可能なフィールドをソートすることができます。 Computedカラムはソートやフィルタリングを高速化します。例えば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/ –

1

を使用すると、日付または日時値を保存する場合は、常にそのデータから曜日名を抽出することができます。

とにかく

、ちょうどこれを行いますクエリ時にクエリを使用するか、クエリにDATENAMEを使用するか、プレゼンテーション層の機能を使用します。そうすることのパフォーマンスコストは、それをIMHOで別々に保管することを正当化するものではありません。また、ネイティブの日付/日時データを使用しても、正しくソートできるはずです。

関連する問題