2012-04-03 85 views
1

我有這個查詢返回一個結果集與日期(列)作爲nvarchar數據類型。從1月到12月開始排序日期(形式爲'1月2001')

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月

幫助表示讚賞的結果。

感謝 希德

+0

您使用的是什麼RDBMS? – 2012-04-03 20:29:30

+0

sql server 2008 – user1176058 2012-04-03 20:55:31

回答

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

謝謝賈斯汀。很明顯。 – user1176058 2012-04-03 21:19:40

1
  1. 您可以通過原始場訂購(DateField2,DateField1如果我看到 它正確)
  2. 可以形成MONTHNAME返回的日期和排序此。
  3. 您可以按順序排列的條款將選擇中的計算組合在一起。
相關問題