Pertanyaan Bagaimana menentukan jumlah hari dalam sebulan di SQL Server?


Saya perlu menentukan jumlah hari dalam sebulan untuk tanggal tertentu di SQL Server.

Apakah ada fungsi bawaan? Jika tidak, apa yang harus saya gunakan sebagai fungsi yang ditentukan pengguna?


75
2018-03-27 18:46


asal


Jawaban:


Anda dapat menggunakan yang berikut ini dengan hari pertama pada bulan yang ditentukan:

datediff(day, @date, dateadd(month, 1, @date))

Agar berhasil untuk setiap tanggal:

datediff(day, dateadd(day, 1-day(@date), @date),
              dateadd(month, 1, dateadd(day, 1-day(@date), @date)))

106
2018-03-27 19:00



Di SQL Server 2012 Anda dapat menggunakan EOMONTH (Transact-SQL) untuk mendapatkan hari terakhir dalam sebulan dan kemudian Anda dapat menggunakannya HARI (Transact-SQL) untuk mendapatkan jumlah hari dalam sebulan.

DECLARE @ADate DATETIME

SET @ADate = GETDATE()

SELECT DAY(EOMONTH(@ADate)) AS DaysInMonth

120
2018-02-02 09:40



Solusi paling elegan: berfungsi untuk apa saja @TANGGAL

DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,@DATE),0)))

Membuangnya dalam fungsi atau hanya menggunakannya secara inline. Ini menjawab pertanyaan asli tanpa semua sampah tambahan dalam jawaban lainnya.

contoh untuk tanggal dari jawaban lain:

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))  Pengembalian 31

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))  Pengembalian 29

SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))  Pengembalian 31


20
2017-10-25 22:42



Lebih sederhana ... coba day(eomonth(@Date))


15
2018-06-05 14:36



--Last Day of Previous Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))

--Last Day of Current Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)))

--Last Day of Next Month
SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0)))

Secara pribadi, saya akan membuat UDF untuk itu jika tidak ada fungsi yang dibangun ...


11
2018-03-27 19:03



Kode ini memberi Anda jumlah hari dalam bulan saat ini:

SELECT datediff(dd,getdate(),dateadd(mm,1,getdate())) as datas

Perubahan getdate() hingga tanggal yang Anda butuhkan untuk menghitung hari.


3
2018-04-28 10:55



Saya akan menyarankan:

pilih hari (EOMONTH (getdate ()))


3
2018-04-05 07:07



Solusi 1: Temukan jumlah hari di bulan apa pun saat ini

DECLARE @dt datetime
SET     @dt = getdate()

SELECT @dt AS [DateTime],
       DAY(DATEADD(mm, DATEDIFF(mm, -1, @dt), -1)) AS [Days in Month]

Solusi 2: Temukan jumlah hari dalam kombinasi bulan-tahun tertentu

DECLARE @y int, @m int
SET     @y = 2012
SET     @m = 2

SELECT @y AS [Year],
       @m AS [Month],
       DATEDIFF(DAY,
                DATEADD(DAY, 0, DATEADD(m, ((@y - 1900) * 12) + @m - 1, 0)),
                DATEADD(DAY, 0, DATEADD(m, ((@y - 1900) * 12) + @m, 0))
               ) AS [Days in Month]

1
2017-08-21 19:34



Anda perlu menambahkan fungsi, tetapi itu sederhana. Saya menggunakan ini:

CREATE FUNCTION [dbo].[ufn_GetDaysInMonth] ( @pDate    DATETIME )

RETURNS INT
AS
BEGIN

    SET @pDate = CONVERT(VARCHAR(10), @pDate, 101)
    SET @pDate = @pDate - DAY(@pDate) + 1

    RETURN DATEDIFF(DD, @pDate, DATEADD(MM, 1, @pDate))
END

GO

1
2018-03-27 19:01



SELECT Datediff(day,
(Convert(DateTime,Convert(varchar(2),Month(getdate()))+'/01/'+Convert(varchar(4),Year(getdate())))),
(Convert(DateTime,Convert(varchar(2),Month(getdate())+1)+'/01/'+Convert(varchar(4),Year(getdate()))))) as [No.of Days in a Month]

1
2018-03-18 14:34



select  datediff(day, 
        dateadd(day, 0, dateadd(month, ((2013 - 1900) * 12) + 3 - 1, 0)),
        dateadd(day, 0, dateadd(month, ((2013  - 1900) * 12) + 3, 0))
        )

Simple Nice dan tidak memerlukan pembuatan fungsi apa pun


1
2018-04-10 08:39