sql如何取某年某月的第一天和最后一天

sql2000中给年,月值,
如'20092',返回 '2009-02-01 00:00:00.000' 和 '2009-02-28 00:00:00.000'
'20093' ,返回 '2009-03-01 00:00:00.000' 和 '2009-03-31 00:00:00.000'
'200911' ,返回 '2009-11-01 00:00:00.000' '和 2009-11-30 00:00:00.000'

SELECT CAST((LEFT('20093',4)+'-'+SUBSTRING('20093',5,LEN('20093'))+'-'+'01') AS DATETIME)--第一天

SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,CAST((LEFT('20093',4)+'-'+SUBSTRING('20093',5,LEN('20093'))+'-'+'01') AS DATETIME)))--最后一天

原理:第一天肯定是1号拉 ,最后一天是下个月第一天减一天。

本月第一天

SELECT dateadd(ms,-1,DATEADD(mm, DATEDIFF(m,0,getdate()), 0)) as mouthlastdate

下月第一天:

SELECT dateadd(ms,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) as mouthlastdate

下下月第一天:

SELECT dateadd(ms,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+2, 0)) as mouthlastdate

扩展资料

sqlserver 时间格式函数详细

--getdate 获取当前时间

select getdate()

--dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月

select dateadd(MONTH,12,'2013-02-17 13:20:16')  --返回:2014-02-17 13:20:16.000  (参数month可以改为 day,year等日期加相应的值)

--datediff 两个时间的差 (后面-前面=返回值)

select datediff(day,'2013-02-01','2013-02-18')   --返回:17  (参数day可以改为 month,year等日期加相应的值)

--datepart 获取日期的某个部分整数

select DATEPART(month, '2013-2-17')  --返回 2    (参数month可以改为 day,year等日期加相应的值)

--datename 获取指定部位的字符串

select datename(weekday, '2013-2-17')  --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值)

--day(), month(),year() 获取指定部位的字符串

select day('2013-2-15') --返回15

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-06

如:给定的年月格式为20157,代表2015年7月。

取某月第一天:

SELECT CAST((LEFT('20157',4)+'-'+SUBSTRING('20157',5,LEN('20157'))+'-'+'01') AS DATETIME)

结果:

取某月最后一天:

SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,CAST((LEFT('20157',4)+'-'+SUBSTRING('20157',5,LEN('20157'))+'-'+'01') AS DATETIME)))

结果:

第2个回答  推荐于2017-09-22
以20093 为例:

SELECT CAST((LEFT('20093',4)+'-'+SUBSTRING('20093',5,LEN('20093'))+'-'+'01') AS DATETIME)
--第一天

SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,CAST((LEFT('20093',4)+'-'+SUBSTRING('20093',5,LEN('20093'))+'-'+'01') AS DATETIME)))
--最后一天

原理:第一天肯定是1号拉 ,最后一天是下个月第一天减一天本回答被提问者采纳
第3个回答  2019-04-24

如:给定的年月格式为20157,代表2015年7月。
取某月第一天:
SELECT CAST((LEFT('20157',4)+'-'+SUBSTRING('20157',5,LEN('20157'))+'-'+'01') AS DATETIME)
结果:
取某月最后一天:
SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,CAST((LEFT('20157',4)+'-'+SUBSTRING('20157',5,LEN('20157'))+'-'+'01') AS DATETIME)))
结果:

第4个回答  2009-02-20
告诉你思路吧。
200902的第一天当然好做, 最后一天呢, 就从2009-03-01 减去1天就可以了
---------------------------------------------------------
select '20092',
convert(datetime,left('20092',4) +'-' + substring('20092',5,len('20092')-4) +'-01'),
dateadd(month,1,convert(datetime,left('20092',4) +'-' + substring('20092',5,len('20092')-4) +'-01')) -1
from 表
-----------------------------------------------------
看起来比较乱, 呵呵, 语句中写着'20092'的地方, 换成你能给出的字段就可以了。