ALTER FUNCTION [dbo].[fnGetDayCountOfMonth]
(@nYear int ,@nMonth int)
RETURNS varchar(16)
AS
BEGIN
declare @nCount int
declare @dt smalldatetime
set @nMonth=@nMonth +1
if(@nMonth = 13)
set @nMonth = 1
set @dt = cast(@nYear as varchar(4))+'-'+cast(@nMonth as varchar(2))+'-1'
set @nCount = datepart(day,@dt - 1)
return @nCount
END
uj5u.com熱心網友回復:
ALTER FUNCTION [dbo].[fnGetDayCountOfMonth]
(@nYear int ,@nMonth int) --傳入兩個int型別的引數
RETURNS varchar(16) --回傳一個varchar型別的結果
AS
BEGIN
declare @nCount INT --定義一個int型別的變數
declare @dt SMALLDATETIME --定義一個smalldatetime型別的變數
set @nMonth=@nMonth +1 --變數@nMonth加1
if(@nMonth = 13) --如果@nCount=13,設定@nMonth=1(這里面的判斷不夠嚴密)
set @nMonth = 1 --如果上面通過,則@nMonth=1,不通過不走這里
set @dt = cast(@nYear as varchar(4))+'-'+cast(@nMonth as varchar(2))+'-1' --設定@dt=傳入引數@nYear+'-'+@nMonth+'-'+1;最后形成的格式如2019-9-1;注意這里的月份已經是你傳入引數@nMonth加上1之后的月份。
set @nCount = datepart(day,@dt - 1) --使用datepart函式獲取到上一行@dt減去一天后得到的日期,比如上面是2019-9-1;減去一天后就是2019-8-31;在這個日期基礎上獲取這個日期的日的值,也就是31。從而得到這個月的天數。
return @nCount --回傳這個天數
END
--個人感覺這個函式寫的不是很嚴謹,還有改善的余地。
SELECT dbo.fnGetDayCountOfMonth(2018,5);
----------------
31
(1 行受影響)
uj5u.com熱心網友回復:
這個應該不是MYSQL的語法uj5u.com熱心網友回復:
應該發在sqlserver版塊uj5u.com熱心網友回復:
感謝大佬的指導

uj5u.com熱心網友回復:
嗯,剛進來對這塊還不熟
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48441.html
標籤:MySQL
上一篇:MySQL 什么時候建立外鍵?
