[SQL] 오늘 날짜를 기준으로 이전 월요일 및 이전 일요일의 날짜
SQL오늘 날짜를 기준으로 이전 월요일 및 이전 일요일의 날짜
나는 저를주고 올바른 구문이 필요합니다 :
그래서, 오늘 날짜를 기준으로 (14/09/2012)은 나는 다음 원하는 것 :
해결법
-
==============================
1.쉬운:
쉬운:
--start of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0) --end of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 6)
편집하다:
아래는 일요일 날짜 문제를 처리합니다.
DECLARE @input varchar(10) --SET @input = '9/9/2012' -- simulates a Sunday SET @input = GETDATE() --start of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, CASE DATEPART(dw,@input) WHEN 1 THEN DATEADD(d,-1,@input) ELSE @input END ), 0) --end of last week SELECT DATEADD(wk, DATEDIFF(wk, 6, CASE DATEPART(dw,@input) WHEN 1 THEN DATEADD(d,-1,@input) ELSE @input END ), 6)
-
==============================
2.대신 케이스 옵션을 사용하여, 당신은 또한 현재 주 일요일 얻기 위해이 작업을 수행 할 수 있습니다 :
대신 케이스 옵션을 사용하여, 당신은 또한 현재 주 일요일 얻기 위해이 작업을 수행 할 수 있습니다 :
SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1+1, GETDATE())
지난 주 일요일를 얻으려면, 7 일 이상 빼기 :
SELECT DATEADD(dd, DATEPART(DW,GETDATE())*-1-6, GETDATE())
-
==============================
3.더 나은, 내 생각, 어떤 DATEFIRST 매개 변수와 함께 어떤 일, 어떤 요일이 작품 (한 주를 시작하는 요일을 설정, 프랑스에서 일반적으로 1-월요일 기본값은 7 일).
더 나은, 내 생각, 어떤 DATEFIRST 매개 변수와 함께 어떤 일, 어떤 요일이 작품 (한 주를 시작하는 요일을 설정, 프랑스에서 일반적으로 1-월요일 기본값은 7 일).
create function [dbo].[previousWeekDayDate](@anyDate date, @anyWeekDay int) returns Date as begin return DATEADD(dd, ((DATEPART(dw,@anyDate) + @@DateFirst - @anyWeekDay + 13) % 7) * -1, @anyDate) end
기능과 사용을 작성, SQL 2008 작동합니다 :
SELECT dbo.previousWeekDayDate(GetDate(),1) --for Monday SELECT dbo.previousWeekDayDate(GetDate(),7) --for Sunday
-
==============================
4.나는이 많은 청소기 솔루션입니다 생각 :
나는이 많은 청소기 솔루션입니다 생각 :
SELECT -- 17530101 or 1753-01-01 is the minimum date in SQL Server DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 7, '17530101') AS [LowerLimit], -- Last Week's Monday DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 1, '17530101') AS [UpperLimit] -- Last Week's Sunday.
어떤은 실제 쿼리에서 다음과 같이 사용할 수 있습니다 :
SELECT * FROM SomeTable WHERE SomeTable.[Date] >= DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 7, '17530101') AND SomeTable.[Date] <= DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE()) / 7) * 7) - 1, '17530101')
다음은 몇 가지 시험은 다음과 같습니다 :
1. 윤년
현재 날짜 : 2016년 2월 29일 00 : 00 : 00.000
결과 :
LowerLimit UpperLimit 2016-02-22 00:00:00.000 2016-02-28 00:00:00.000
2. 지난 주 다른 해에 있었다
현재 날짜 : 2016년 1월 6일 00 : 00 : 00.000
LowerLimit UpperLimit 2015-12-28 00:00:00.000 2016-01-03 00:00:00.000
현재 달의 전월과 상한 3. 하한
현재 날짜 : 2016년 5월 4일 00 : 00 : 00.000
LowerLimit UpperLimit 2016-04-25 00:00:00.000 2016-05-01 00:00:00.000
4. 현재 날짜가 일요일
현재 날짜 : 2016년 5월 8일 00 : 00 : 00.000
LowerLimit UpperLimit 2016-04-25 00:00:00.000 2016-05-01 00:00:00.000
-
==============================
5.일요일에 문제가 MSSQL 2012 년 모두 간단한 솔루션으로 적어도 더 이상 일 현재까지 나타납니다 주목해야한다
일요일에 문제가 MSSQL 2012 년 모두 간단한 솔루션으로 적어도 더 이상 일 현재까지 나타납니다 주목해야한다
SELECT DATEADD(wk, DATEDIFF(wk, 6, @input), 0)
그리고 복잡한 일
SELECT DATEADD(wk, DATEDIFF(wk, 6, CASE DATEPART(dw,@input) WHEN 1 THEN DATEADD(d,-1,@input) ELSE @input END ), 0)
나는 일요일을 포함하여 시도한 것이 어떤 날짜에 대해 동일한을 반환합니다.
-
==============================
6.이전 월요일 :
이전 월요일 :
SELECT DATEADD(DD,-(DATEPART(WEEKDAY, GETDATE())+5)%7, GETDATE())
이전 일요일
SELECT DATEADD(DD,-(DATEPART(WEEKDAY, GETDATE())+6)%7, GETDATE())
from https://stackoverflow.com/questions/12422248/previous-monday-previous-sundays-date-based-on-todays-date by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 5 세트로 그룹 행 (0) | 2020.07.15 |
---|---|
[SQL] 오라클 SQL 구문 : 인용 식별자 (0) | 2020.07.15 |
[SQL] SSIS에서 여러 열로 쉼표 구분 기호와 데이터의 단일 열을 분할 (0) | 2020.07.15 |
[SQL] SQL 서버 JDBC와 "NoClassDefFoundError를 모두 javax / XML / 바인드 / DatatypeConverter" (0) | 2020.07.14 |
[SQL] 열 값으로 행 값을 만들기 - SQL PIVOT (0) | 2020.07.14 |