sqlserver获取某个月多少天

day()函数是获取某个时间的天数,参数必须是日期字段类型


1、当数据字段类型是int时,且是某月的第一天

思路:获取到某月的最后一天,即下个月第一天的前一天日期,用day()函数取到天数

例如 m_date=20150201 

首先转换成字符型:

convert(varchar(8),m_date+100 ,112)

其中:加100是取下个月的第一天,112代表yyyymmdd格式的日期


然后转换成日期型:

cast(convert(varchar(8),m_date+100,112) as datetime);//下个月的第一天
cast(convert(varchar(8),m_date+100,112) as datetime)-1;//下个月的第一天的前一天

然后就可以用day()函数了:

day(cast(convert(varchar(8),m_date+100 ,112) as datetime)-1)

到这里,需要解决一个BUG,那就是当m_date=20141201时,转换成日期时会报错,因为没有20141301的日期,所以需要特殊处理一下,将20141201+8900=20150101

假设有个记录月份的字段m_month,可以这么写:

case when m_month=12 then
	day(cast(convert(varchar(8),m_date+8900 ,112) as datetime)-1)
else 
	day(cast(convert(varchar(8),m_date+100 ,112) as datetime)-1)


2、当数据字段类型是int时,任意一天时间

思路:同上,即获取到某月的最后一天,即下个月第一天的前一天日期,用day()函数取到天数

例如 m_date=20150204

day(cast(convert(varchar(8),(m_date-m_date%100+1+100) ,112) as datetime)-1)

这个也要根据月份特殊处理一下,此处不给答案了


3、当有2个数据字段类型是int时,一个是年,一个是月份

day(cast(CAST(m_year as varchar(4))+'-'+CAST(m_month+1 as varchar(2))+'-01' as datetime)-1)

这个也要根据月份特殊处理一下,此处不给答案了


4、获取当前日期的月天数

SELECT 32-DAY(getdate()+32-DAY(getdate())) 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值