2012-04-03 118 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. 您可以按顺序排列的条款将选择中的计算组合在一起。
相关问题