JMS*_*S49 1 t-sql datetime date sql-drop
我正在T-SQL中编写一个函数,无论日期输入如何,都会返回该月的最后一天.
这是我的代码:
Alter Function dbo.FN_Get_Last_Day_in_Month2
(@FN_InputDt Datetime)
Returns smalldatetime
as
Begin
Declare @Result smalldatetime
Set @Result =
case when @FN_InputDt <> 01-01-1900 then
DATEADD(m, DATEDIFF(M, 0,@FN_InputDt)+1, -1)
Else 0 End
Return @Result
End
Run Code Online (Sandbox Code Playgroud)
代码无法正常工作,这是一个显示不良行为的测试:
SELECT dbo.fn_get_last_day_in_month (07-05-2010)
Run Code Online (Sandbox Code Playgroud)
这是(不正确的)结果:
2010-07-31 00:00:00
Run Code Online (Sandbox Code Playgroud)
什么是07-05-2010 ... 5月7日或7月5日?您需要使用安全日期格式,请参阅为SQL Server设置标准DateFormat
DECLARE @d DATETIME
SET @d = '20100705' -- notice ISO format
SELECT
DATEADD(yy, DATEDIFF(yy, 0, @d), 0) AS FirstDayOfYear,
DATEADD(yy, DATEDIFF(yy, 0, @d)+1, -1) AS LastDayOfYear,
DATEADD(qq, DATEDIFF(qq, 0, @d), 0) AS FirstDayOfQuarter,
DATEADD(qq, DATEDIFF(qq, 0, @d)+1, -1) AS LastDayOfQuarter,
DATEADD(mm, DATEDIFF(mm, 0, @d), 0) AS FirstDayOfMonth,
DATEADD(mm, DATEDIFF(mm, 0, @d)+1, -1) AS LastDayOfMonth,
@d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 AS FirstDayOfWeek,
@d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 + 6 AS LastDayOfWeek
Run Code Online (Sandbox Code Playgroud)
仅适用于日使用日或日期部分
select DAY(getdate()),
DATEPART(dd,GETDATE())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2614 次 |
| 最近记录: |