[SQL] 어떻게 SQL Server에서 월의 일 수를 결정하기 위해?
SQL어떻게 SQL Server에서 월의 일 수를 결정하기 위해?
나는 SQL Server에서 주어진 날짜의 월의 일 수를 결정해야합니다.
내장 기능이 있습니까? 그렇지 않으면, 나는 사용자 정의 함수로 무엇을 사용해야합니까?
해결법
-
==============================
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.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.대부분의 우아한 해결책은 : 어떤 @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.훨씬 더 간단 ... 시도 일 (EOMONTH (@date))
훨씬 더 간단 ... 시도 일 (EOMONTH (@date))
-
==============================
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.내가 제안 할게:
내가 제안 할게:
SELECT DAY(EOMONTH(GETDATE()))
-
==============================
7.이 코드는 당신에게 현재 월의 일 수를 가져옵니다
이 코드는 당신에게 현재 월의 일 수를 가져옵니다
SELECT datediff(dd,getdate(),dateadd(mm,1,getdate())) as datas
당신이 일을 계산하는 데 필요한 날짜로 변경 GETDATE ().
-
==============================
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.해결 방법 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.당신은 기능을 추가 할 필요가 없지만, 그것은 단순한 하나입니다. 나는 이것을 사용
당신은 기능을 추가 할 필요가 없지만, 그것은 단순한 하나입니다. 나는 이것을 사용
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.
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.
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.당신은 함수를 작성해야하지만, 자신의 편의를 위해입니다. 그것은 완벽하게 작동하고 나는이 기능을 사용하여 결함이 계산을 발생하지 않았다.
당신은 함수를 작성해야하지만, 자신의 편의를 위해입니다. 그것은 완벽하게 작동하고 나는이 기능을 사용하여 결함이 계산을 발생하지 않았다.
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.
select add_months(trunc(sysdate,'MM'),1) - trunc(sysdate,'MM') from dual;
-
==============================
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.여기에 또 하나의 ...
여기에 또 하나의 ...
Select Day(DateAdd(day, -Day(DateAdd(month, 1, getdate())), DateAdd(month, 1, getdate())))
-
==============================
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.
SELECT DAY(SUBDATE(ADDDATE(CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-1'), INTERVAL 1 MONTH), INTERVAL 1 DAY))
니스 앤 심플하고 기능을 만들 필요가 없습니다
-
==============================
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.노를 얻으려면. 한 달에 일의 우리가 직접 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.
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.
RETURN day(dateadd(month, 12 * @year + @month - 22800, -1)) select day(dateadd(month, 12 * year(date) + month(date) - 22800, -1))
-
==============================
23.어떤 날짜
어떤 날짜
select DateDiff(Day,@date,DateAdd(month,1,@date))
-
==============================
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.SQL 서버 2012에서 간단한 쿼리 :
SQL 서버 2012에서 간단한 쿼리 :
선택 일 (( '20-05-1951 22시 0분 0초'))
나는 많은 날짜를 테스트하고 항상 올바른 결과를 반환
-
==============================
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.
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.
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)
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
'SQL' 카테고리의 다른 글
[SQL] 수동 가까이 SqlDataReader 개체의 처분 할 필요가 있습니까? (0) | 2020.04.03 |
---|---|
[SQL] SQL 문자열에 이스케이프 앰퍼샌드 문자 (0) | 2020.04.03 |
[SQL] 두 번 같은 테이블에 가입하는 가장 좋은 방법은 무엇입니까? (0) | 2020.04.03 |
[SQL] 어떻게 SQLite 데이터베이스에 날짜 값을 삽입합니까? (0) | 2020.04.03 |
[SQL] 포스트 그레스를 사용하여 한 번에 3 개 테이블의 데이터 삽입 (0) | 2020.04.03 |