2009-06-01 69 views
0

我需要不同的年份和月份從日期列將按同一列排序。排序不同的日期列

我有像(YYYY/MM/DD)

2007/11/7 
2007/1/8 
2007/11/4 
2007/12/3 
2008/10/4 
2009/11/5 
2008/5/16 

值日期coulmn有查詢後,它應該是

2007/1/1 
2007/11/1 
2007/12/1 
2008/5/1 
2008/10/1 
2009/11/1 

這似乎並不奏效

SELECT distinct (cast(year(datecol) as nvarchar(20)) + 
     '/'+ cast(month(datecol) as nvarchar(20)) + '/1') as dt1 
FROM Table 
ORDER BY dt1 

回答

2

Soemthing這樣將MS SQL Server上的工作:

select 
    distinct 
    dateadd(day, -1 * DAY(datefield) + 1, datefield) 
From 
    datetable 
order by 
    dateadd(day, -1 * DAY(datefield) + 1, datefield) 

DateAdd函數調用基本上減去(天-1)天從當前日期 - >您始終獲得第一個月無論該日起是在。

排序它,你就完成了! :-)

此外,你也可以到你的表中,作爲「計算列」添加此功能,然後用它輕鬆acccess:

alter table yourTable 
    add FirstOfMonth As DATEADD(day, -1 * DAY(datefield) + 1, datefield) persisted 

然後將查詢會更簡單:

SELECT DISTINCT FirstOfMonth 
FROM YourTable 
ORDER BY FirstOfMonth 

馬克

0

在處理SqlServer中的日期時避免使用這樣的cast - re根據服務器配置不同,格式會有所不同。

取而代之的是使用convert並選擇一個格式(例如112),將前導零添加到月份。

0

阿尼爾, 你也有日期時間的一部分?你用什麼dataType的列?你是 使用DateTime的數據類型或字符?

這對我的作品

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1