加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver获取某个月多少天

发布时间:2020-12-12 12:50:42 所属栏目:MsSql教程 来源:网络整理
导读:day()函数是获取某个时间的天数,参数必须是日期字段类型 1、当数据字段类型是int时,且是某月的第一天 思路:获取到某月的最后一天,即下个月第一天的前一天日期,用day()函数取到天数 例如 m_date=20150201? 首先转换成字符型: convert(varchar(8),m_date

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


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

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

例如 m_date=20150201?

首先转换成字符型:

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

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


然后转换成日期型:

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

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

day(cast(convert(varchar(8),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),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())) 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读