博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

上帝他爷

分别担任CU、ITPUB以及CSDN社区的MySQL版主! 我本来想说我是吃屎的! ^_^
  yueliangdao0608.cublog.cn

关于作者
姓名:杨涛
职业:DBA
年龄:25
位置:中国-深圳
个性介绍:又长了一岁
QQ:38257291
MSN:yueliangdao0608@gmail.com
|| << >> ||
我的分类


[原创]SQL SERVER 获得一个月有多少天 的函数例子


-- 获得一个月有多少天
-- 经典算法


CREATE  function DaysInMonth (@when datetime)
returns int
as
BEGIN
declare
@rv int

if datepart(month, @when) = 2
begin
    if datepart(year, @when) % 400 = 0
    select @rv = 29
else
    if datepart(year, @when) % 100 = 0
    select @rv = 28
else
    if datepart(year, @when) % 4 = 0
    select @rv = 29
else
    select @rv = 28
end -- if
else
begin
select @rv = case (datepart(month, @when))
    when 4 then 30
    when 6 then 30
    when 9 then 30
    when 11 then 30
    else 31
    end -- case
end -- else

return @rv

END -- fn def


GO


-- 另类算法
create function GetMonths (@Month smallint, @Year int)
returns smallint
as
begin
 return(DAY(dateadd(dd,-1,DATEADD(m,1,cast(@Year as varchar(4)) + '-' + cast(@Month as varchar(2)) + '-01'))))

-- 下个月一号减去一天就是上个月最后一天。
end

其实在MYSQL中有更简洁的表达:

 

mysql> select right(last_day(now()),2) as 'days in month';
+---------------+
| days in month |
+---------------+
| 31            |
+---------------+
1 row in set (0.00 sec)


发表于: 2007-06-26,修改于: 2008-01-16 11:31,已浏览1018次,有评论2条 推荐 投诉


网友评论
网友: 小导弹 时间:2007-06-27 10:44:11 IP地址:220.231.223.★
最后一个很新颖,学习了。

Blog作者的回复:
谢谢。有更好的贴出来。


网友: software820830@hotmail.com 时间:2008-04-16 16:45:05 IP地址:124.77.2.★
简单易学,硬道理

Blog作者的回复:
呵呵


 发表评论