2012-04-03 17 views
1

Date(列)をnvarcharデータ型として返すこのクエリがあります。1月から12月にかけて日付をソートする(01年1月の形式)

SELECT DISTINCT 
    DateName(month , DateAdd(month , (CONVERT(int,DateField1)) - 1 , '2000-01-01')) 
    +' '+ DateName(year , DateAdd(year , (CONVERT(int,DateField2)), '2000-01-01')) AS [Date] 
FROM dbo.table1 
WHERE DateName(year , DateAdd(year , (CONVERT(int,DateField2)), '2000-01-01'))= 2009. 

ここで、DateField1とDateField2は、table1の列です。

-------------- 
Date 
-------------- 
March 2009 
June 2009 
August 2009 
September 2009 
July 2009 
May 2009 
November 2009 
December 2009 
February 2009 
April 2009 
January 2009 
October 2009 

以下のように私は私が2009年12月に2009年1月から開始し、結果セットをソートしたい結果を得る

ヘルプは大歓迎。 (私が正しく にそれを見ればDateField2、DateField1)あなたは、元のフィールドで注文することができ

おかげ シド

+0

あなたはどのRDBMSを使用していますか? –

+0

SQL Server 2008 – user1176058

答えて

2

あなただけの(私はこのケースでキャストによってサブクエリではなく、順番に呼び出しをラップしている)

SELECT * 
FROM 
(
    SELECT DISTINCT 
     CAST(
      DateName(month , DateAdd(month , (CONVERT(int,DateField1)) - 1 , '2000-01-01')) 
      +' '+ DateName(year , DateAdd(year , (CONVERT(int,DateField2)), '2000-01-01')) 
     AS DATETIME) AS [Date] 
    FROM dbo.table1 
    WHERE DateName(year , DateAdd(year , (CONVERT(int,DateField2)), '2000-01-01'))= 2009 
) AS MyDate 
ORDER BY Date 

SQL Serverが適切にこれを変換することができます最終的な結果をキャストすることができます。Here is the fiddle to show the cast works

+0

ありがとうJustin。それは明らかだ。 – user1176058

1
  1. あなたは戻って、この上の日付とソートにMONTHNAMEを形成することができます。
  2. order by句の選択範囲内で計算を組み合わせることができます。
関連する問題