[SQL] 지난 일요일 찾기
SQL지난 일요일 찾기
어떻게 SQL 2000에서 한 달의 마지막 일요일을 찾을 것인가?
해결법
-
==============================
1.
SELECT DATEADD(day,DATEDIFF(day,'19000107',DATEADD(month,DATEDIFF(MONTH,0,GETDATE() /*YourValuehere*/),30))/7*7,'19000107')
편집 : 내 동료에서 수정, 최종 작업 대답.
-
==============================
2.
select dateadd(day,1-datepart(dw, getdate()), getdate())
-
==============================
3.연습 창고 데이터에서 빌려 다른 방법. 날짜 차원 테이블을 만들고 10 년, 또는 정도를 미리로드.
연습 창고 데이터에서 빌려 다른 방법. 날짜 차원 테이블을 만들고 10 년, 또는 정도를 미리로드.
TABLE dimDate (DateKey, FullDate, Day, Month, Year, DayOfWeek, DayInEpoch, MonthName, LastDayInMonthIndicator, many more..)
강제로 할 수있는 dimDate 가장 쉬운 방법은 Excel에서 오후를 보내고 다음 거기에서 DB를 가져 오는 것입니다. 혹시 날짜에 대해 알고 싶어 아무것도 - 반 - 괜찮은 dimDate 테이블은 50 개 이상의 열이 있습니다.
장소에두고, 문제는 뭔가를 같이된다 :
SELECT max(FullDate) FROM dimDate WHERE DayOfWeek = 'Sunday' AND Month = 11 AND Year = 2009;
기본적으로 모든 날짜 관련 쿼리는 간단된다.
-
==============================
4.요일에 관계없이 매일 SQL에서 다음 일요일 : 리턴 2011-01-02 23 : 59 : 59.000 22 12 월 - 2010 년 :
요일에 관계없이 매일 SQL에서 다음 일요일 : 리턴 2011-01-02 23 : 59 : 59.000 22 12 월 - 2010 년 :
select DateADD(ss, -1, DATEADD(week, DATEDIFF(week, 0, getdate()), 14))
-
==============================
5.나는 이러한 솔루션 중 일부는 하드 그래서 여기에 이해의 단계를 설명하는 변수로 내 버전입니다 찾으십시오.
나는 이러한 솔루션 중 일부는 하드 그래서 여기에 이해의 단계를 설명하는 변수로 내 버전입니다 찾으십시오.
ALTER FUNCTION dbo.fn_LastSundayInMonth ( @StartDate DATETIME ,@RequiredDayOfWeek INT /* 1= Sunday */ ) RETURNS DATETIME AS /* A detailed step by step way to get the answer... SELECT dbo.fn_LastSundayInMonth(getdate()-31,1) SELECT dbo.fn_LastSundayInMonth(getdate()-31,2) SELECT dbo.fn_LastSundayInMonth(getdate()-31,3) SELECT dbo.fn_LastSundayInMonth(getdate()-31,4) SELECT dbo.fn_LastSundayInMonth(getdate()-31,5) SELECT dbo.fn_LastSundayInMonth(getdate()-31,6) SELECT dbo.fn_LastSundayInMonth(getdate()-31,7) */ BEGIN DECLARE @MonthsSince1900 INTEGER DECLARE @NextMonth INTEGER DECLARE @DaysToSubtract INTEGER DECLARE @FirstDayOfNextMonth DATETIME DECLARE @LastDayOfMonthDayOfWeek INTEGER DECLARE @LastDayOfMonth DATETIME DECLARE @ReturnValue DATETIME SET @MonthsSince1900=DateDiff(month, 0, @StartDate) SET @NextMonth=@MonthsSince1900+1 SET @FirstDayOfNextMonth = DateAdd(month,@NextMonth, 0) SET @LastDayOfMonth = DateAdd(day, -1, @FirstDayOfNextMonth) SET @ReturnValue = @LastDayOfMonth WHILE DATEPART(dw, @ReturnValue) <> @RequiredDayOfWeek BEGIN SET @ReturnValue = DATEADD(DAY,-1, @ReturnValue) END RETURN @ReturnValue END
-
==============================
6.
DECLARE @LastDateOfMonth smalldatetime SELECT @LastDateOfMonth = DATEADD(month, DATEDIFF(month, -1, GETDATE()), 0) -1 Select DATEADD(dd,-( CASE WHEN DATEPART(weekday,@LastDateOfMonth) = 1 THEN 0 ELSE DATEPART(weekday,@LastDateOfMonth) - 1 END ),@LastDateOfMonth)
-
==============================
7.어머나,이 못생긴, 그러나 여기 간다 :
어머나,이 못생긴, 그러나 여기 간다 :
DECLARE @dtDate DATETIME SET @dtDate = '2009-11-05' SELECT DATEADD(dd, -1*(DATEPART(dw, DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @dtDate)+1, 0)))-1), DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @dtDate)+1, 0)))
-
==============================
8.첫 번째는 집계 테이블을 만들었습니다. http://www.sqlservercentral.com/articles/T-SQL/62867/ 당신이 원하는 것을 얻을 ..
첫 번째는 집계 테이블을 만들었습니다. http://www.sqlservercentral.com/articles/T-SQL/62867/ 당신이 원하는 것을 얻을 ..
http://www.sqlservercentral.com/Forums/Topic515226-1291-1.aspx
DECLARE @DateStart DATETIME, @DateEnd DATETIME SELECT @DateStart = '20080131', @DateEnd = '20101201' SELECT DATEADD(wk,DATEDIFF(wk,6,DATEADD(mm,DATEDIFF(mm,-1,DATEADD(mm,t.N-1,@DateStart)),-1)),6) FROM dbo.Tally t WHERE t.N <= DATEDIFF(mm,@DateStart,@DateEnd)
-
==============================
9.여기에 올바른 방법을 차지하고있어 @@ DATEFIRST
여기에 올바른 방법을 차지하고있어 @@ DATEFIRST
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fu_dtLastSundayInMonth]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) BEGIN EXECUTE(N'CREATE FUNCTION [dbo].[fu_dtLastSundayInMonth]() RETURNS int BEGIN RETURN 0 END ') END GO /* SET DATEFIRST 3; -- Monday WITH CTE AS ( SELECT 1 AS i, CAST('20190101' AS datetime) AS mydate UNION ALL SELECT i+1 AS i, DATEADD(month, 1, CTE.mydate) AS mydate FROM CTE WHERE i < 100 ) SELECT -666 AS i, dbo.fu_dtLastSundayInMonth('17530101') AS lastSundayInMonth, dbo.fu_dtLastSundayInMonth('17530101') AS Control UNION ALL SELECT -666 AS i, dbo.fu_dtLastSundayInMonth('99991231') AS lastSundayInMonth, dbo.fu_dtLastSundayInMonth('99991231') AS Control UNION ALL SELECT mydate ,dbo.fu_dtLastSundayInMonth(mydate) AS lastSundayInMonth ,dbo.fu_dtLastSundayInMonth(mydate) AS lastSundayInMonth ,DATEADD(day,DATEDIFF(day,'19000107', DATEADD(MONTH, DATEDIFF(MONTH, 0, mydate, 30))/7*7,'19000107') AS Control FROM CTE */ -- ===================================================================== -- Description: Return date of last sunday in month -- of the same year and month as @in_DateTime -- ===================================================================== ALTER FUNCTION [dbo].[fu_dtLastSundayInMonth](@in_DateTime datetime ) RETURNS DateTime AS BEGIN -- Abrunden des Eingabedatums auf 00:00:00 Uhr DECLARE @dtReturnValue AS DateTime -- 26.12.9999 SO IF @in_DateTime >= CAST('99991201' AS datetime) RETURN CAST('99991226' AS datetime); -- @dtReturnValue is now last day of month SET @dtReturnValue = DATEADD ( DAY ,-1 ,DATEADD ( MONTH ,1 ,CAST(CAST(YEAR(@in_DateTime) AS varchar(4)) + RIGHT('00' + CAST(MONTH(@in_DateTime) AS varchar(2)), 2) + '01' AS datetime) ) ) ; -- SET DATEFIRST 1 -- Monday - Super easy ! -- SET DATEFIRST != 1 - PHUK THIS ! SET @dtReturnValue = DATEADD ( day , - ( ( -- DATEPART(WEEKDAY, @lastDayofMonth) -- with SET DATEFIRST 1 DATEPART(WEEKDAY, @dtReturnValue) + @@DATEFIRST - 2 % 7 + 1 ) %7 ) , @dtReturnValue ); RETURN @dtReturnValue; END GO
-
==============================
10.
select next_day(last_day(sysdate)-7, 'Sunday') from dual
from https://stackoverflow.com/questions/1794697/find-last-sunday by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL : 연속 기록에 그룹으로 (0) | 2020.07.04 |
---|---|
[SQL] 이 SELECT 쿼리는 마무리 180 초 소요 (0) | 2020.07.04 |
[SQL] 절에 SQL에 튜플을 사용하여 (0) | 2020.07.03 |
[SQL] 오라클 DB : java.sql.SQLException의 : 폐쇄 연결 (0) | 2020.07.03 |
[SQL] MySQL은 어떻게 클러스터 된 인덱스를 만들려면 어떻게해야합니까? (0) | 2020.07.03 |