2016-12-11 7 views
2

Transactionというテーブルがあります。そこにTimeStampデータ型の列Timeが見つかりました。SQL Serverで時間をソートする方法は?

のでデータは、私は例

`2015-01-17 08:12:48.000` `8 AM` 
`2015-01-17 14:12:48.000` `2 PM` 

について8 am

のように表示したい2015-01-17 08:12:48.000

のように見えることだろう今私は、上記のような結果を得ました。これは私の結果です

Hour 
---- 
01 PM 
02 PM 
04 PM 
05 PM 
06 PM 
07 AM 
07 PM 
08 AM 
09 AM 
10 AM 
11 AM 
12 PM 

これは上記の結果のクエリです。

SELECT 
    FORMAT(CAST(Time as datetime),'hh tt') hour, 
    COUNT(TransactionNumber) Total_Transaction, 
    SUM(Total) salesCost 
FROM 
    [HQMatajer].[dbo].[Transaction] 
WHERE 
    StoreID = '1001' 
    AND YEAR(Time) = '2015' 
    AND MONTH(Time) = '01' 
    AND DAY(Time) = '15' 
GROUP BY 
    FORMAT(CAST(Time as datetime),'hh tt')` 

今、時間を並べ替える必要があります。

この中で結果として得られる
, convert(varchar(2), [time], 8) 
order by convert(varchar(2), [time], 8) 

:それはあなたの文の最後にこれを追加すること

07 AM 
08 AM 
09 AM 
10 AM 
11 AM 
12 PM 
01 PM 
02 PM 
. 
. 
07 PM 

おかげ

+1

SQL Serverの 'timestamp'データ型は、**日付と時刻とはまったく関係ありません** - 単純なサーバーベースの**バイナリカウンタ**です。 .. –

+0

私は*タイムスタンプではなく、ここでは 'datetime'を意味します。 'timestamp'を使用している場合、値は意味がありません(注意:技術的に' timestamp'は時代遅れです - これは 'rowversion'のエイリアスになりました - タイプはこの混乱を避けるために名前が変更されました) –

答えて

2

試しのように表示すべき

SELECT 
    FORMAT(CAST(Time as datetime),'hh tt') hour, 
    COUNT(TransactionNumber) Total_Transaction, 
    SUM(Total) salesCost 
FROM 
    [HQMatajer].[dbo].[Transaction] 
WHERE 
    StoreID = '1001' 
    AND YEAR(Time) = '2015' 
    AND MONTH(Time) = '01' 
    AND DAY(Time) = '15' 
GROUP BY 
    FORMAT(CAST(Time as datetime),'hh tt') 
    , convert(varchar(2), [time], 8) 
order by convert(varchar(2), [time], 8) 

convert(varchar(2),[time],8)スタイルで日時を返します。 8の形式は、hh:mi:ssvarchar(2)を使用すると、hhに切り捨てられます。

convert and stylesのドキュメント

Shakeer Mirzaが投稿したように、datepart()を使用すると同様に動作します。

datepartのドキュメント単に

+0

thankx働いています。 8って何ですか? –

+1

私の解答を説明で更新しました。希望が助けてくれる! – SqlZim

2

使用DATEPART機能

Select DATEPART(HH, YOUR_DATETIME_COL) AS HR, ...... 
    ........ --Write your Statements 
    ........ 
    ORDER BY HR 

DATEPARTは整数形式で結果を与えます。したがって、Order byは正確な順序を指定します

関連する問題