sqlserver中獲取月份的天數(shù)的方法分享
更新時間:2011年09月12日 14:53:01 作者:
今天查看以前專案的數(shù)據(jù)庫自定義函數(shù),溫習溫習。發(fā)現(xiàn)其中有一個函數(shù),是獲取月份的天數(shù)的自定義函數(shù)。
如下:
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)
RETURN @RValue
END
GO
獲取月份天數(shù),以前在博客上也有寫過,不過它只是取得二月份的天數(shù)。鏈接如下:http://www.cnblogs.com/insus/articles/2025019.html
現(xiàn)第一眼看見專案中這個函數(shù),總覺它寫得不夠好的感覺,是否能把它改寫得更好些,啟發(fā)點也是從獲取二月份天數(shù)的CASE函數(shù)想起的。
因此,我嘗試改了,如下:
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 CASE WHEN (YEAR(@Date) % 4 = 0 AND YEAR(@Date) % 100 <> 0) OR (YEAR(@Date) % 400 = 0)
THEN 29
ELSE 28
END
END
END
如果你已經(jīng)有引過Insus.NET那個獲取二月份天數(shù)的自定義函數(shù),也可以參考下面這個版本:
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].[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)
RETURN @RValue
END
GO
獲取月份天數(shù),以前在博客上也有寫過,不過它只是取得二月份的天數(shù)。鏈接如下:http://www.cnblogs.com/insus/articles/2025019.html
現(xiàn)第一眼看見專案中這個函數(shù),總覺它寫得不夠好的感覺,是否能把它改寫得更好些,啟發(fā)點也是從獲取二月份天數(shù)的CASE函數(shù)想起的。
因此,我嘗試改了,如下:
復制代碼 代碼如下:
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 CASE WHEN (YEAR(@Date) % 4 = 0 AND YEAR(@Date) % 100 <> 0) OR (YEAR(@Date) % 400 = 0)
THEN 29
ELSE 28
END
END
END
如果你已經(jīng)有引過Insus.NET那個獲取二月份天數(shù)的自定義函數(shù),也可以參考下面這個版本:
復制代碼 代碼如下:
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
相關(guān)文章
SQL Server 定時訪問url激活數(shù)據(jù)同步示例
這篇文章主要介紹的是SQL Server 定時訪問url激活數(shù)據(jù)同步的具體實現(xiàn),需要的朋友可以參考下2014-05-05
SQLServer 附加數(shù)據(jù)庫后出現(xiàn)只讀或失敗的解決方法
如果你在附加SQL數(shù)據(jù)庫,出現(xiàn)只讀或失敗的情況,來看下本文的解決方案吧。2010-03-03
揭秘SQL Server 2014有哪些新特性(4)-原生備份加密
SQL Server原聲備份加密對數(shù)據(jù)安全提供了非常好的解決方案。使用原生備份加密基本不會增加備份文件大小,并且打破了使用透明數(shù)據(jù)加密后幾乎沒有壓縮率的窘境。2014-08-08

