题
我需要从日期列这将通过相同的列进行排序不同的年份和月份。
我有像值日期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
不隶属于 StackOverflow