澳门新萄京:sqlserver中收获月份的造化的点子分享

关于10月份的特殊性管理

正如: 复制代码 代码如下: CREATE FUNCTION
[dbo].[udf_DaysInMonth] ( @Date DATETIME ) RETURNS INT AS BEGIN
DECLARE @dim AS TABLE (M INT,Dy INT) INSERT INTO @dim VALUES
(1,31),(3,31),(5,31),(7,31),(8,31),(10,31),(12,31),
(4,30),(6,30),(9,30),(11,30), (2, CASE WHEN (YEAR(@Date) % 4 = 0 AND
YEAR(@Date) % 100 0) OR (YEAR(@Date) % 400 = 0) THEN 29 ELSE 28 END )
DECLARE @RValue INT SELECT @RValue = [Dy] FROM @dim WHERE [M] =
MONTH(@Date卡塔尔国 RETU昂科雷N @LX570Value END GO
获取月份天数,以往在博客上也许有写过,可是它只是获得11月份的气数。链接如下:
现第一眼看到专案中那个函数,总觉它写得非常不够好的认为,是还是不是能把它改写得越来越好些,启示点也是从获取四月份命运的CASE函数想起的。
由此,小编尝试改了,如下: 复制代码
代码如下: CREATE FUNCTION [dbo].[udf_DaysInMonth] ( @Date DATETIME
卡塔尔国 RETU凯雷德NS INT AS BEGIN RETU纳瓦拉N CASE WHEN MONTH(@Date卡塔尔 IN
(1,3,5,7,8,10,12卡塔尔(قطر‎ THEN 31 WHEN MONTH(@DateState of Qatar IN (4,6,9,11卡塔尔 THEN 30 ELSE
CASE WHEN (YEA奥德赛(@Date卡塔尔国 % 4 = 0 AND YEA大切诺基(@Date卡塔尔 % 100 0卡塔尔(قطر‎ O福睿斯 (YEA途乐(@Date卡塔尔国% 400 = 0State of Qatar THEN 29 ELSE 28 END END END
假设您早本来就有引过Insus.NET那些获取12月份天数的自定义函数,也能够参见上面那个版本:
复制代码 代码如下: CREATE FUNCTION
[dbo].[udf_DaysInMonth] ( @Date DATETIME ) RETURNS INT AS BEGIN
RETURN CASE WHEN MONTH(@Date) IN (1,3,5,7,8,10,12) THEN 31 WHEN
MONTH(@Date) IN (4,6,9,11) THEN 30 ELSE
[dbo].[DaysOfFebruary](YEAR(@Date)) END END

CREATE FUNCTION [dbo]澳门新萄京,.[DaysOfFebruary] ( @Year INT ) RETURNS INT
AS BEGIN RETURN CASE WHEN (@Year % 4 = 0 AND @Year % 100 0) OR (@Year
% 400 = 0) THEN 29 ELSE 28 END END

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

SELECT [dbo].[DaysOfFebruary](2011)

实例

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图