SQL如何计算指定日期当前月

来源:百度知道 编辑:UC知道 时间:2024/05/02 13:46:10
比如给出的日期是2007-01-01到2007-01-31之间的任意一天,我想计算出上一月两月三月等等月的第一天应该怎么写。
比如给出的日期是:2007-01-05
我要计算出:2006-12-01,2006-11-01,2006-10-01,……
我现在使用的写法是:
SELECT CONVERT(char(10),CONVERT(datetime,CONVERT(char(8),'2006-03-28',120)+'1'),120)
SELECT CONVERT(char(10),CONVERT(datetime,CONVERT(char(8),CONVERT(datetime,'2006-03-28')-31,120)+'1'),120)
SELECT CONVERT(char(10),CONVERT(datetime,CONVERT(char(8),CONVERT(datetime,'2006-03-28')-62,120)+'1'),120)
SELECT CONVERT(char(10),CONVERT(datetime,CONVERT(char(8),CONVERT(datetime,'2006-03-28')-93,120)+'1'),120)
SELECT CONVERT(char(10),CONVERT(datetime,CONVERT(char(8),CONVERT(datetime,'2006-03-28')-124,120)+'1'),120)
不知道有没有其它更好的方法,因为这样的写法,在日期偏小时会计算错误

给出的日期求当月一号的方法你的写法应该是比较简单的方法了,不过感觉你给转换成char型不太好,最好是varchar型的,另外你的写法可以简写成
select convert(varchar(6),cast('2006-3-8' as datetime),112)+'01'
这样得到的'20060301'可以直接作为日期来使用,不必再转换。

得到之前几个个月的第一天可以直接用dateadd来实现
比如得到3月1日的上一月1日,也就是2月1日的方法是
select dateadd(month,-1,convert(varchar(6),cast('2006-3-8' as datetime),112)+'01')