나는 특정 날짜와 가장 가까운 금요일 날짜를 판별하는 우아한 간단한 방법을 찾고 있습니다. 어떤 아이디어?T-Sql에서 특정 날짜가 "가장 가까운"금요일을 찾으십시오.
답변
당신은 화요일 주중 될 수 있도록 (DATEFIRST
사용) 일주일의 시작을 밀어해야하고 방금 추가 가장 가까운 금요일에 갈 일수. 당신은 가장 가까운 (과거 또는 미래) 금요일을 찾을 필요가있는 경우
SET NOCOUNT ON
SET DATEFIRST 3
Declare @DateValue DateTime
SET @DateValue = '1/1/2010'
While @DateValue < '2/1/2011'
BEGIN
PRINT DateAdd (Day, 3 - DatePart (dw, @DateValue), @DateValue)
SET @DateValue = @DateValue + 1
END
나에게 같습니다 SET의 NOCOUNT을 SET ON DATEFIRST 2 선언 @DateValue 날짜 시간 SET @DateValue = '2010년 1월 1일' @DateValue 동안 < '2011년 2월 1일' ( SET @DateValue = @DateValue + 1 END –
나는이 위에서 언급 한 바와 같이이 잘 작동하고 가장 가까운 금요일 "라운드"가 - PRINT DateAdd 함수 (DATEPART (DW, @DateValue), @DateValue 일, 4) BEGIN 또는 아래로) 변경해야하지만 다음과 같이 변경해야합니다. ... SET DATEFIRST 3 ... PRINT DateAdd (일, 4 - DatePart ... –
이 미래에 가장 가까운 금요일 반환
SELECT DATEADD(day, 6 - (DATEDIFF(day, '01/01/2010', @mydate) - 1) % 7, @mydate)
2010 년 1 월 1 일자 날짜 리터럴의 사용법을 설명 할 수 있습니까? 그것은 임의적입니까, 아니면 주기적으로 업데이트해야합니까? –
루프에서 날짜 범위에 대해이 항목을 실행했는데 다음 금요일 (가장 가까운 날짜)이 아닌 –
을 반환한다고 생각합니다. 2010-03-01 (오늘)에 실행하면 2010- 03-05 가장 가까운 것은 아니지만 2010-2-26입니다. –
,이 시도 :
DECLARE @StartDate datetime
,@EndDate datetime
,@BeforeDate datetime
SET @StartDate='2010-3-1'---<<<given date, Monday, closest should be '2010-2-26'
SET @[email protected]+8
SET @[email protected]
;with AllDates AS
(
SELECT @StartDate AS DateOf, 1 as TypeOf,DATENAME(weekday,@StartDate) AS WeekDayOf, ABS(DATEDIFF(day,@StartDate,@StartDate)) AS DifferenceOf
UNION ALL
SELECT DateOf+1 AS DateOf,2 AS TypeOf,DATENAME(weekday,DateOf+1) AS WeekDayOf, ABS(DATEDIFF(day,@StartDate,DateOf+1)) AS DifferenceOf
FROM AllDates
WHERE DateOf<@EndDate-1 AND TypeOf IN (1,2)
UNION ALL
SELECT DateOf-1 AS DateOf,3 AS TypeOf,DATENAME(weekday,DateOf-1) AS WeekDayOf, ABS(DATEDIFF(day,@StartDate,DateOf-1)) AS DifferenceOf
FROM AllDates
WHERE DateOf>@BeforeDate-1 AND TypeOf IN (1,3)
)
SELECT TOP 1 DateOf
FROM AllDates
WHERE WeekDayOf='Friday'
ORDER BY DifferenceOf
출력 :
DateOf
-----------------------
2010-02-26 00:00:00.000
(1 row(s) affected)
트릭은 얼마나 많은 일 거리를 결정하는 것입니다 가장 가까운 금요일은 제안 된 날짜입니다.
일요일 -2
월요일 -3
화요일 3
수요일 2
목요일 1
금요일 0
토요일 : 전체 주에 떨어진 가장 가까운에서 일수를 보면, 금요일을 돕기 위해 -1
이제 이러한 결과를 반환하는 수식이 필요합니다. 일요일과 월요일은 다른 요일과 다른 패턴을 따르기 때문에 두 가지 수식이 필요합니다.
첫째, 여기는 일요일과 월요일입니다. 요일 값에 1을 더한 다음에 음수를 취하여 날짜에 적용합니다. 예를 들어, Monday는 요일 값으로 2의 기본값을가집니다. (2 + 1) * -1 = -3이다. -3 + 월요일 = 금요일.
화요일 - 토요일 유사한 산술 : 날짜는 요일 값 3, 4, 5, 6, &을 반환합니다. 7. 날짜 추가 값은 각각 3,2,1,0, -1이 필요합니다. 이 계산식은 DW * -1 + 6입니다.
DECLARE @Date AS datetime
SET @Date = '3/1/2010'
SELECT
CASE
WHEN DATEPART(dw, @Date) <= 2
THEN DATEADD(d, -1 * (DATEPART(dw, @Date) + 1), @Date)
ELSE DATEADD(d, DATEPART(dw, @Date) * -1 + 6, @Date)
END AS NearestFriday
T 그의 대답은 훌륭한 대답이다. 설명과 해결책에 감사한다. – dougajmcdonald
SQL Server 솔루션은 사용자 정의 함수입니다. 가장 가까운 금요일뿐만 아니라 평일 (1-7) 중 가장 가까운 날짜로 반올림합니다.
CREATE FUNCTION RoundToNearestWeekday (
--Give this function a date, and the number of the weekday you want to round to the nearest of
@DateInput date, --Date you want to round
@ToWeekdayNumber tinyint --1 = round to nearest Sunday, 2 = round to nearest Monday, etc.
)
RETURNS date
AS
BEGIN
DECLARE @Offset tinyint, @LowNumber smallint, @HighNumber smallint, @NewDate date
SET @Offset = (@ToWeekdayNumber + 3)%7
SET @LowNumber = @Offset-3
SET @HighNumber = @Offset+4
SET @NewDate = dateadd(day,CASE WHEN datepart(weekday,@DateInput) <= @Offset THEN @LowNumber ELSE @HighNumber END - datepart(weekday,@DateInput),@DateInput)
RETURN @NewDate
END
- 1. 가장 가까운 벡터를 찾으십시오
- 2. TSQL에서 "가장 많이 발생하는"값으로 어떻게 정렬합니까?
- 3. TSQL에서 웹 서비스를 호출하는 가장 좋은 방법
- 4. xpath 페이지에서 특정 링크를 찾으십시오.
- 5. XML의 특정 매개 변수를 찾으십시오
- 6. 바자와 파일의 특정 변경을 찾으십시오.
- 7. 가장 많은 수의 배열 찾으십시오.
- 8. 가장 가까운 위도와 경도를 찾으십시오
- 9. MapKit 가장 가까운 Loacation을 찾으십시오
- 10. 특정 번호 순서에 'featured'를 추가하는 코드를 찾으십시오.
- 11. 스타일 특정 날짜가 jquery ui datepicker 플러그인
- 12. 날짜가
- 13. AS3 오늘 날짜가 가장 가까운 날짜를 가져옵니다.
- 14. TSQL에서 단일 열을 연결
- 15. TSQL에서 uniqueidentifier를 증가 시키십시오.
- 16. 특정 셀렉터를 사용하는 사이트의 모든 페이지를 찾으십시오.
- 17. HTML을 구문 분석하여 특정 링크를 찾으십시오. (키워드없이)
- 18. Ruby에서 특정 해시가 사용하고있는 바이트 수를 찾으십시오.
- 19. jQuery xml 특정 자식이없는 노드를 찾으십시오.
- 20. 가장 가까운 날짜의 컬렉션에서 항목을 찾으십시오.
- 21. regex 캡처 그룹에서 가장 일치하는 항목을 찾으십시오
- 22. 안드로이드에서 JSONObject에 가장 빠른 방법 문자열을 찾으십시오.
- 23. 두 노드 사이에서 가장 긴 경로를 찾으십시오.
- 24. 데이터베이스에 가장 가까운 숫자 값을 찾으십시오.
- 25. 히스토그램을 사용하여 배열에서 가장 일반적인 문자를 찾으십시오.
- 26. TSQL에서 HH.Mi 형식의 날짜 계산
- 27. TSQL에서 트리거 재귀를 어떻게 오해합니까?
- 28. tsql에서 여러 조건으로 테이블 업데이트
- 29. TSQL에서 열거 형을 시뮬레이션 하시겠습니까?
- 30. TSQL에서 사용 권한을보고 추가하고 삭제합니다.
우리에게 가장 가깝고 어쩌면 예를 정의하십시오. 토요일은 수요일보다 더 가깝습니까? –