SQL Query查找该月的最后一天

pra*_*u R 38 sql-server datetime sql-server-2005 date

我需要以下列格式找到一个月的最后一天:

"2013-05-31 00:00:00:000"
Run Code Online (Sandbox Code Playgroud)

有人请帮忙.

Dev*_*art 70

试试这个 -

CREATE FUNCTION [dbo].[udf_GetLastDayOfMonth] 
(
    @Date DATETIME
)
RETURNS DATETIME
AS
BEGIN

    RETURN DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @Date) + 1, 0))

END
Run Code Online (Sandbox Code Playgroud)

查询:

DECLARE @date DATETIME
SELECT @date = '2013-05-31 15:04:10.027'

SELECT DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @date) + 1, 0))
Run Code Online (Sandbox Code Playgroud)

输出:

-----------------------
2013-05-31 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

  • 请记住,如果您在 between 语句中使用它来获取(例如)给定月份的所有记录,这将排除最后一天的记录。您可能需要改用下个月的第一天。 (2认同)

MgS*_*Sam 43

我知道这个问题适用于SQL Server 2005,但我想我会提到 - 从SQL 2012开始,现在有一个EOMONTH()功能可以在本月的最后一天获得.要以原始提问者指定的格式获取它,您必须转换为datetime.

SELECT CAST(eomonth(GETDATE()) AS datetime)
Run Code Online (Sandbox Code Playgroud)


And*_*mar 12

SQL Server 2012引入了以下eomonth功能:

select eomonth('2013-05-31 00:00:00:000')
-->
2013-05-31
Run Code Online (Sandbox Code Playgroud)

  • 他标记了“sql-server-2005”。“EOMONTH”是 2012 年及以上 (3认同)

Ric*_*iwi 8

declare @date datetime;
set @date = getdate(); -- or some date
select dateadd(month,1+datediff(month,0,@date),-1);
Run Code Online (Sandbox Code Playgroud)