2017-12-13 6 views
1

現在、履歴データを報告するテーブルが設定されています。私はそれがmm/dd/yyyy hh:mmAM/PMとして日付フォーマットのフィールドが表示されるように、私はTIMEOFACTION列を編集した書式設定された日付の並べ替え

SELECT ACTIONTYPE, 
     BINNUM, 
     DSID, 
     LOCATIONNAME, 
     LOCATIONTYPE, 
     ORDNO, 
     ORIGREC, 
     convert(varchar(10),TIMEOFACTION, 101) + 
      right(convert(varchar(32),TIMEOFACTION,100),8) as TIMEOFACTION, 
     TOTALLIFE 
FROM DLOCATIONHISTORY 
ORDER BY TIMEOFACTION DESC 

を持っています。ただし、APの前に来るので、私のクエリを参照しているプログラムはPMの前にAMを置いています。これを防ぐためにクエリを解決する最善の方法は何ですか?私が使用できる別の注文方法がありますか?

私の現在のレポートクエリは示しています

**TIMEOFACTION** 
12/13/2017 7:29AM 
12/12/2017 10:07AM 
12/12/2017 9:58AM 
12/12/2017 1:51PM 
12/12/2017 2:02PM 
12/11/2017 11:01AM 

はそれが表示されるはずです時:

**TIMEOFACTION** 
12/13/2017 7:29AM 
12/12/2017 2:02PM 
12/12/2017 1:51PM 
12/12/2017 10:07AM 
12/12/2017 9:58AM 
12/11/2017 11:01AM 
+1

はあなたが別のエイリアス名を使用して、ソート「アクションの時間」の元の名前で – Dean

+0

が、悲しいことに、私はできませんでした。表示されるフィールドは、エイリアスではなく、データベース内の実際の列でなければなりません。 – Brad

+1

本当ですか?あなたのプレゼンテーション層は、本当のSQL「日付」とそれ自身のフォーマットである列をとることはできません。ここでの適切な解決策は、適切な順序付け可能な「日付」をデータ側に保持し、プレゼンテーション側でのみそのフォーマットを操作することです。それ以外のものは最高のクルーグになります。 –

答えて

0

LOL、テーブル名またはテーブルの別名を持つだけで、完全なリファレンスカラム:

SELECT ACTIONTYPE, 
     BINNUM, 
     DSID, 
     LOCATIONNAME, 
     LOCATIONTYPE, 
     ORDNO, 
     ORIGREC, 
     convert(varchar(10),TIMEOFACTION, 101) + 
      right(convert(varchar(32),TIMEOFACTION,100),8) as TIMEOFACTION, 
     TOTALLIFE 
FROM DLOCATIONHISTORY 
ORDER BY DLOCATIONHISTORY.TIMEOFACTION DESC --<-- here! 

Simplified sample

MS SQL Serverの2014スキーマのセットアップ

create table t (i int, a char(1)); 
insert into t values 
(1,'a'), 
(2,'b'), 
(3,'c'); 

クエリ1

select -1*i as i, a 
from t 
order by t.i 

Results

| i | a | 
|----|---| 
| -1 | a | 
| -2 | b | 
| -3 | c | 

クエリ2

select -1*i as i, a 
from t 
order by i 

Results

| i | a | 
|----|---| 
| -3 | c | 
| -2 | b | 
| -1 | a | 
0

あなたは、元の列名に戻って名前を変更し、その後、列の別名で派生テーブルを使用することができます。たとえば:

DECLARE @table TABLE(TIMEOFACTION datetime) 
INSERT INTO @table VALUES 
('2017-12-13 07:29:00') 
,('2017-12-12 10:07:00') 
,('2017-12-12 09:58:00') 
,('2017-12-12 13:51:00') 
,('2017-12-12 14:02:00') 
,('2017-12-11 11:01:00') 

SELECT convert(varchar(10),dT.TIMEOFACTION2, 101) 
     + right(convert(varchar(32),TIMEOFACTION2,100),8) as TIMEOFACTION 
    FROM (
     SELECT TIMEOFACTION AS TIMEOFACTION2 
      FROM @table 
     ) AS dT 
ORDER BY TIMEOFACTION2 DESC 

が生成されます

TIMEOFACTION 
12/13/2017 7:29AM 
12/12/2017 2:02PM 
12/12/2017 1:51PM 
12/12/2017 10:07AM 
12/12/2017 9:58AM 
12/11/2017 11:01AM 
関連する問題