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 回答