sqlserver中獲取月份的天數(shù)的方法分享
更新時間:2011年09月12日 14:53:01 作者:
今天查看以前專案的數(shù)據(jù)庫自定義函數(shù),溫習(xí)溫習(xí)。發(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ā)點(diǎn)也是從獲取二月份天數(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
復(fù)制代碼 代碼如下:
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ā)點(diǎn)也是從獲取二月份天數(shù)的CASE函數(shù)想起的。
因此,我嘗試改了,如下:
復(fù)制代碼 代碼如下:
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ù),也可以參考下面這個版本:
復(fù)制代碼 代碼如下:
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)文章
SQLServer 錯誤: 15404,無法獲取有關(guān) Windows NT 組/用戶 WIN-8IVSNAQS8T7\A
SQLServer 錯誤: 15404,無法獲取有關(guān) Windows NT 組/用戶 'WIN-8IVSNAQS8T7\Administrator' 的信息,錯誤代碼 0x534。 [SQLSTATE 42000] (ConnIsLoginSysAdmin)2021-06-06Zabbix監(jiān)控SQL Server服務(wù)狀態(tài)的方法詳解
這篇文章主要給大家介紹了關(guān)于Zabbix監(jiān)控SQL Server服務(wù)狀態(tài)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10sql語句查詢重復(fù)的數(shù)據(jù)(最新推薦)
這篇文章主要介紹了sql語句查詢重復(fù)的數(shù)據(jù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05SQL Server 事務(wù),異常和游標(biāo)詳解
這篇文章主要為大家介紹了SQLServer事務(wù),異常和游標(biāo),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01SQL Server數(shù)據(jù)庫基本概念、組成、常用對象與約束
這篇文章介紹了SQL Server數(shù)據(jù)庫的基本概念、組成、常用對象與約束,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03sql server 2012 數(shù)據(jù)庫所有表里查找某字符串的方法
此TSQL語句是針對SQL Server 2012編寫。如果使用之前版本,需要對部分語句進(jìn)行重寫。2013-03-03