Fråga : TSQL-scalaren fungerar using vald insida fungera, & utesluta datera

Jag ber om ursäkt i förskott för att fråga vad är rimlig ett grundläggande ifrågasätter, problemet är att I-förmiddagen som är ny till SQL och ha svårigheter med förmiddaghandstilen för syntax.

I detta fungerar:

Alter fungerar dbo. Fn_get_last_day
(@d för datetime
för @d för
begin

declare för @FN_InputDtdatetime

Returns @d
as fastställd = för @d=
för @FN_InputDt

select fallet, när @FN_InputDt = 0 0 else
väljer därefter dagen (@Fn_InputDt) DatePart (D, @FN_InputDt) end

Return

End

Here för
är de gångna tillbaka felen:
Msg 156, jämnar 15, påstår 1, tillvägagångssättet FN_GET_LAST_DAY, fodrar syntax för 16
incorrect nära nyckelordet ”väljer”.
Msg 102, jämnar 15, påstår 1, tillvägagångssättet FN_GET_LAST_DAY, fodrar br/>
för END'< fodrar 21
Incorrect för syntax för syntax för 16
Incorrrect nära 'D'
Msg 102, jämnar 15, påstår 1, tillvägagångssättet FN_GET_LAST_DAY, nära ' " klar "

Svar : TSQL-scalaren fungerar using vald insida fungera, & utesluta datera

Nu jag ser vad du är after.

förändra sig fungerar dbo. Fn_get_last_day (@FN_InputDtdatetime)
går int tillbaka
som
börja
gå fallet tillbaka när @FN_InputDt=0, därefter som 0 annan dag (dateadd (M, 1+datediff (M, 0, @FN_InputDt), 0) - 1) avslutar
avsluta

X = datediff (M, 0, @FN_InputDt) -- beräknar, hur många månader har förflutit från ”faktiskt daterar 0”,
Y = dateadd (M, 1+X, 0) -- tillfogar 1+X som månader till ”det faktiskt daterar 0”, så vi är i den nästa månaden (X+1)
Notera: biverkningen är att det också uppsättningen dag-i-månaden till den 1st dagen av månaden
Z = Y-1  -- ta en fridag, så vi är tillbaka i denna månad, på den sist dagen
Dag (Z)   --- få dagen av månaden
Andra lösningar  
 
programming4us programming4us