복붙노트

[SQL] 어떻게 SQL Server에서 월의 일 수를 결정하기 위해?

SQL

어떻게 SQL Server에서 월의 일 수를 결정하기 위해?

나는 SQL Server에서 주어진 날짜의 월의 일 수를 결정해야합니다.

내장 기능이 있습니까? 그렇지 않으면, 나는 사용자 정의 함수로 무엇을 사용해야합니까?

해결법

  1. ==============================

    1.당신은 지정된 달 1 일에 다음을 사용할 수 있습니다 :

    당신은 지정된 달 1 일에 다음을 사용할 수 있습니다 :

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

    이 모든 날짜를 작동하게하려면 :

    datediff(day, dateadd(day, 1-day(@date), @date),
                  dateadd(month, 1, dateadd(day, 1-day(@date), @date)))
    
  2. ==============================

    2.SQL 서버 2012 년에는 달의 마지막 날을 얻기 위해 EOMONTH (Transact-SQL)를 사용할 수 있습니다 다음은 월의 일 수를 얻을 DAY (Transact-SQL)를 사용할 수 있습니다.

    SQL 서버 2012 년에는 달의 마지막 날을 얻기 위해 EOMONTH (Transact-SQL)를 사용할 수 있습니다 다음은 월의 일 수를 얻을 DAY (Transact-SQL)를 사용할 수 있습니다.

    DECLARE @ADate DATETIME
    
    SET @ADate = GETDATE()
    
    SELECT DAY(EOMONTH(@ADate)) AS DaysInMonth
    
  3. ==============================

    3.대부분의 우아한 해결책은 : 어떤 @DATE 작동

    대부분의 우아한 해결책은 : 어떤 @DATE 작동

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

    함수에 던져하거나 인라인을 사용합니다. 이것은 다른 답변에서 모든 여분의 정크없이 원래의 질문에 응답합니다.

    다른 답변에서 날짜 예 :

    SELECT DAY (DATEADD (DD, -1, DATEADD는 (MM, DATEDIFF는 (MM은 -1 '1 / 2천9분의 31'), 0))) (31)를 돌려

    SELECT DAY (DATEADD (DD, -1, DATEADD는 (MM, DATEDIFF는 (MM은 -1 '2404 2 월 15'), 0))) (29)를 돌려

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

  4. ==============================

    4.훨씬 더 간단 ... 시도 일 (EOMONTH (@date))

    훨씬 더 간단 ... 시도 일 (EOMONTH (@date))

  5. ==============================

    5.

    --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)))
    

    A는 기능을 내장이없는 경우 개인적으로하지만, 나는 그것을 위해 UDF를 만들 것입니다 ...

  6. ==============================

    6.내가 제안 할게:

    내가 제안 할게:

    SELECT DAY(EOMONTH(GETDATE()))
    
  7. ==============================

    7.이 코드는 당신에게 현재 월의 일 수를 가져옵니다

    이 코드는 당신에게 현재 월의 일 수를 가져옵니다

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

    당신이 일을 계산하는 데 필요한 날짜로 변경 GETDATE ().

  8. ==============================

    8.

       --- sql server below 2012---
        select day( dateadd(day,-1,dateadd(month, 1, convert(date,'2019-03-01'))))
        -- this for sql server 2012--
        select day(EOMONTH(getdate()))
    
  9. ==============================

    9.해결 방법 1 : 우리는 현재에있어 어떠한 월의 일 수를 찾기

    해결 방법 1 : 우리는 현재에있어 어떠한 월의 일 수를 찾기

    DECLARE @dt datetime
    SET     @dt = getdate()
    
    SELECT @dt AS [DateTime],
           DAY(DATEADD(mm, DATEDIFF(mm, -1, @dt), -1)) AS [Days in Month]
    

    해결 방법 2 : 특정 월 - 년 콤보의 일 수를 찾기

    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]
    
  10. ==============================

    10.당신은 기능을 추가 할 필요가 없지만, 그것은 단순한 하나입니다. 나는 이것을 사용

    당신은 기능을 추가 할 필요가 없지만, 그것은 단순한 하나입니다. 나는 이것을 사용

    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
    
  11. ==============================

    11.

    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]
    
  12. ==============================

    12.

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

    좋은 간단한 및 기능 작동 파인를 만들 필요가 없습니다

  13. ==============================

    13.당신은 함수를 작성해야하지만, 자신의 편의를 위해입니다. 그것은 완벽하게 작동하고 나는이 기능을 사용하여 결함이 계산을 발생하지 않았다.

    당신은 함수를 작성해야하지만, 자신의 편의를 위해입니다. 그것은 완벽하게 작동하고 나는이 기능을 사용하여 결함이 계산을 발생하지 않았다.

    CREATE FUNCTION [dbo].[get_days](@date datetime)
    RETURNS int
    AS
    BEGIN
        SET @date = DATEADD(MONTH, 1, @date)
        DECLARE @result int = (select DAY(DATEADD(DAY, -DAY(@date), @date)))
        RETURN @result
    END
    

    작동 원리 : 날짜 자체에서 날짜의 일 수를 뺀 것은 당신에게 이전 달의 마지막 날을 제공합니다. 그래서, 당신은, 지정된 일자 1 개월을 추가 날 번호를 빼고 결과의 일 구성 요소를 얻을 필요가있다.

  14. ==============================

    14.

    select add_months(trunc(sysdate,'MM'),1) -  trunc(sysdate,'MM') from dual;
    
  15. ==============================

    15.나는 다드을 upvoted하지만,이뿐만 아니라 작동합니다. :)

    나는 다드을 upvoted하지만,이뿐만 아니라 작동합니다. :)

    CREATE function dbo.IsLeapYear
    (
        @TestYear int
    )
    RETURNS bit
    AS
    BEGIN
        declare @Result bit
        set @Result = 
        cast(
            case when ((@TestYear % 4 = 0) and (@testYear % 100 != 0)) or (@TestYear % 400 = 0)
            then 1
            else 0
            end
        as bit )
        return @Result
    END
    GO
    
    CREATE FUNCTION dbo.GetDaysInMonth
    (
        @TestDT datetime
    )
    RETURNS INT
    AS
    BEGIN
    
        DECLARE @Result int 
        DECLARE @MonthNo int
    
        Set @MonthNo = datepart(m,@TestDT)
    
        Set @Result = 
        case @MonthNo
            when  1 then 31
            when  2 then 
                case 
                    when dbo.IsLeapYear(datepart(yyyy,@TestDT)) = 0
                    then 28
                    else 29
                end
            when  3 then 31
            when  4 then 30
            when  5 then 31
            when  6 then 30
            when  7 then 31
            when  8 then 31
            when  9 then 30 
            when 10 then 31
            when 11 then 30 
            when 12 then 31
        end
    
        RETURN @Result
    END
    GO
    

    테스트

    declare @testDT datetime;
    
    set @testDT = '2404-feb-15';
    
    select dbo.GetDaysInMonth(@testDT)
    
  16. ==============================

    16.여기에 또 하나의 ...

    여기에 또 하나의 ...

    Select Day(DateAdd(day, -Day(DateAdd(month, 1, getdate())), 
                             DateAdd(month, 1, getdate())))
    
  17. ==============================

    17.이 질문은 오래 알고 있지만 난 내가 사용하고 무엇을 공유 할 것이라고 생각했다.

    이 질문은 오래 알고 있지만 난 내가 사용하고 무엇을 공유 할 것이라고 생각했다.

    DECLARE @date date = '2011-12-22'
    
    /* FindFirstDayOfMonth - Find the first date of any month */
    -- Replace the day part with -01
    DECLARE @firstDayOfMonth date = CAST( CAST(YEAR(@date) AS varchar(4)) + '-' + 
                                          CAST(MONTH(@date) AS varchar(2)) + '-01' AS date)
    SELECT @firstDayOfMonth
    

    DECLARE @date date = '2011-12-22'
    
    /* FindLastDayOfMonth - Find what is the last day of a month - Leap year is handled by DATEADD */
    -- Get the first day of next month and remove a day from it using DATEADD
    DECLARE @lastDayOfMonth date = CAST( DATEADD(dd, -1, DATEADD(mm, 1, FindFirstDayOfMonth(@date))) AS date)
    
    SELECT @lastDayOfMonth
    

    사람들은 필요한 경우 특정 월의 일 수를 검색 할 수있는 단일 함수를 생성하기 위해 결합 될 수있다.

  18. ==============================

    18.

    SELECT DAY(SUBDATE(ADDDATE(CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-1'), INTERVAL 1 MONTH), INTERVAL 1 DAY))
    

    니스 앤 심플하고 기능을 만들 필요가 없습니다

  19. ==============================

    19.다드 Afshari 응답은 자신의 블로그 https://cmcenroe.me/2014/12/05/days-in-month-formula.html에 커티스 매켄로에 의해 주어진 떨어져 평소이 답변은 형식적인 수학적 접근 방식을 기반으로 가장 정확 하나입니다

    다드 Afshari 응답은 자신의 블로그 https://cmcenroe.me/2014/12/05/days-in-month-formula.html에 커티스 매켄로에 의해 주어진 떨어져 평소이 답변은 형식적인 수학적 접근 방식을 기반으로 가장 정확 하나입니다

    DECLARE @date  DATE= '2015-02-01'
    DECLARE @monthNumber TINYINT 
    DECLARE @dayCount TINYINT
    SET @monthNumber = DATEPART(MONTH,@date )
    SET @dayCount = 28 + (@monthNumber + floor(@monthNumber/8)) % 2 + 2 %    @monthNumber + 2 * floor(1/@monthNumber)   
    SELECT @dayCount + CASE WHEN @dayCount = 28 AND DATEPART(YEAR,@date)%4 =0 THEN 1 ELSE 0 END -- leap year adjustment
    
  20. ==============================

    20.노를 얻으려면. 한 달에 일의 우리가 직접 SQL에서의 날 ()를 사용할 수 있습니다.

    노를 얻으려면. 한 달에 일의 우리가 직접 SQL에서의 날 ()를 사용할 수 있습니다.

    SQL 서버 2,008분의 2,005에 대한 내 대답의 말에 게시 된 링크를 따라.

    다음의 예와 결과는 SQL 2012입니다

    alter function dbo.[daysinm]
    (
    @dates nvarchar(12)
    )
    returns int
    as
    begin
    Declare @dates2 nvarchar(12)
    Declare @days int
    begin
    select @dates2 = (select DAY(EOMONTH(convert(datetime,@dates,103))))
    set @days = convert(int,@dates2)
    end
    return @days
    end
    
    --select dbo.daysinm('08/12/2016')
    

    SQL 서버 SSMS에서 결과

      (no column name)
    1 31
    

    방법:

    EOMONTH를 사용하는 경우, 우리는 그것을 사용하는 날짜 형식은 SQL 서버의 날짜 시간 형식으로 변환 중. 이어서 EOMONTH 일 출력 ()이 될 것 같은 2016년 12월 31일 해 2016 12 월 및 일뿐만 아니라 31 구비. () 일에 전달하면이 출력은 전체 일 월에 계산 당신에게 제공합니다.

    우리는 우리가 직접 아래의 코드를 실행할 수 있습니다 확인하기 위해 즉시 결과를 얻고 싶은 경우에,

    select DAY(EOMONTH(convert(datetime,'08/12/2016',103)))
    

    또는

    select DAY(EOMONTH(convert(datetime,getdate(),103)))
    

    SQL 서버 2005/2008/2012에서 작업을 참조를 들어, 다음과 같은 외부 링크를 클릭하십시오 ...

    SQL에서 월의 일 번호 찾기

  21. ==============================

    21.

    DECLARE  @m int
    SET     @m = 2
    
    SELECT 
           @m AS [Month],
           DATEDIFF(DAY,
                    DATEADD(DAY, 0, DATEADD(m, +@m -1, 0)),
                    DATEADD(DAY, 0, DATEADD(m,+ @m, 0))
                   ) AS [Days in Month]
    
  22. ==============================

    22.

    RETURN day(dateadd(month, 12 * @year + @month - 22800, -1)) 
    select day(dateadd(month, 12 * year(date) + month(date) - 22800, -1)) 
    
  23. ==============================

    23.어떤 날짜

    어떤 날짜

    select DateDiff(Day,@date,DateAdd(month,1,@date))
    
  24. ==============================

    24.

    DECLARE @date nvarchar(20)
    SET @date ='2012-02-09 00:00:00'
    SELECT DATEDIFF(day,cast(replace(cast(YEAR(@date) as char)+'-'+cast(MONTH(@date) as char)+'-01',' ','')+' 00:00:00' as datetime),dateadd(month,1,cast(replace(cast(YEAR(@date) as char)+'-'+cast(MONTH(@date) as char)+'-01',' ','')+' 00:00:00' as datetime)))
    
  25. ==============================

    25.SQL 서버 2012에서 간단한 쿼리 :

    SQL 서버 2012에서 간단한 쿼리 :

    선택 일 (( '20-05-1951 22시 0분 0초'))

    나는 많은 날짜를 테스트하고 항상 올바른 결과를 반환

  26. ==============================

    26.first_day = DATEADD 선택 (DD -1 * 날짜 부분 (DD, GETDATE을 ()) + 1 GETDATE ()), LAST_DAY = DATEADD (DD -1 * 날짜 부분 (DD, DATEADD (mm, 1, GETDATE ())) DATEADD (mm, 1, GETDATE ())), NO_OF_DAYS = 1 + DATEDIFF (DD, DATEADD (DD -1 * 날짜 부분 (DD, GETDATE ()) + 1 GETDATE ()) DATEADD (DD -1 * 날짜 부분 (DD, DATEADD (mm, 1, GETDATE ( ))), DATEADD (mm, 1, GETDATE ())))

    first_day = DATEADD 선택 (DD -1 * 날짜 부분 (DD, GETDATE을 ()) + 1 GETDATE ()), LAST_DAY = DATEADD (DD -1 * 날짜 부분 (DD, DATEADD (mm, 1, GETDATE ())) DATEADD (mm, 1, GETDATE ())), NO_OF_DAYS = 1 + DATEDIFF (DD, DATEADD (DD -1 * 날짜 부분 (DD, GETDATE ()) + 1 GETDATE ()) DATEADD (DD -1 * 날짜 부분 (DD, DATEADD (mm, 1, GETDATE ( ))), DATEADD (mm, 1, GETDATE ())))

    특정 날짜 개월의 노를 얻을 수 GETDATE 어떤 날짜를 교체

  27. ==============================

    27.

    DECLARE @Month INT=2,
        @Year INT=1989
    DECLARE @date DateTime=null
    SET @date=CAST(CAST(@Year AS nvarchar) + '-' + CAST(@Month AS nvarchar) + '-' + '1' AS DATETIME);
    
    DECLARE @noofDays TINYINT 
    DECLARE @CountForDate TINYINT
    SET @noofDays = DATEPART(MONTH,@date )
    SET @CountForDate = 28 + (@noofDays + floor(@noofDays/8)) % 2 + 2 %    @noofDays + 2 * floor(1/@noofDays)   
    SET @noofDays= @CountForDate + CASE WHEN @CountForDate = 28 AND DATEPART(YEAR,@date)%4 =0 THEN 1 ELSE 0 END
    PRINT @noofDays
    
  28. ==============================

    28.

    DECLARE @date DATETIME = GETDATE(); --or '12/1/2018' (month/day/year) 
    SELECT DAY(EOMONTH ( @date )) AS 'This Month'; 
    SELECT DAY(EOMONTH ( @date, 1 )) AS 'Next Month';
    

    결과: 이번 달 (31)

    다음 달 (30)

  29. from https://stackoverflow.com/questions/691022/how-to-determine-the-number-of-days-in-a-month-in-sql-server by cc-by-sa and MIT license