我需要从日期列这将通过相同的列进行排序不同的年份和月份。

我有像值日期coulmn(YYYY / MM / DD)

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

具有查询之后,它应该是

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
有帮助吗?

解决方案

这样Soemthing将MS SQL服务器上工作:

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

马克

其他提示

使用cast这样SQLServer中避免与日期当处理 - 得到的格式将取决于服务器配置改变

而是使用 convert 并选择一种格式(例如112 ),增加了前导零到一个月。

阿尼尔, 你是否也有日期时间的一部分?您使用的列什么的dataType?你是 使用日期时间数据类型或字符?

这对我的作品

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top