1

Date(column) を nvarchar データ型として結果セットを返すこのクエリがあります。

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 年 1 月から 2009 年 12 月までの結果セットを並べ替えたいと思います。

助けていただければ幸いです。

ありがとうシド

4

2 に答える 2

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 はこれを適切に変換できます。キャストの動作を示すフィドルを次に示します。

于 2012-04-03T21:03:04.680 に答える
1
  1. 元のフィールドで注文できます(正しく表示されていれば、DateField2、DateField1)
  2. Monthname を日付に戻して、これで並べ替えることができます。
  3. order by 句の選択で計算を組み合わせることができます。
于 2012-04-03T20:31:44.977 に答える