2012-11-27 2 views
3

오늘부터 지난 15 일까지 데이터 범위를 선택하고 싶습니다 (이번 달 또는 지난 달). 이것이 TSQL에서 어떻게 이루어 집니까?오늘부터 15 일까지의 데이터를 선택 하시겠습니까?

Get last Friday's Date unless today is Friday using T-SQL 다음은 적어도 DATEDIFF을 사용해야 할 것 같습니다. 그것은 월/년 회고하는 경우

set @date='yyyy-mm-15' 

그러나 yyyy 또는 mm 단순히 현재의 년/월이 될 수 없을 것입니다 : 내가 좋아하는, 날짜 문자열을 구축 고려하고

.

답변

4

이 당신이 원하는 무엇을 제공해야

SELECT * 
FROM YourTable 
WHERE YourDate > CAST((
      CASE 
       WHEN DAY(getdate()) < 15 
        THEN (CAST(YEAR(GETDATE()) AS CHAR(4)) + CAST(MONTH(dateadd(month, - 1, getdate())) AS CHAR(2)) + '15') 
       ELSE CAST(YEAR(GETDATE()) AS CHAR(4)) + CAST(MONTH(GETDATE()) AS CHAR(2)) + '15' 
       END 
      ) AS DATETIME) 

편집 DAY (GETDATE())가> 15 에 하루 (GETDATE()) < (15), 결과가 반전 된 것처럼 언제 언제 변경 :)

+1

나는 이것을 시도했지만, 2012 년 11 월 9 일 결과 집합에서 하나의 날짜를 얻었다. 오늘부터 2012 년 11 월 15 일까지만 게재되어야합니다. 첫 번째 사례는 이번 달부터 만 제출하면 안되며 지난 달이 아닌가? – JBurace

+0

적어도 당신은 그것을하는 방법에 대한 생각을 가지고 있습니다. 그러나 이것에서 일할 수는 있습니다. 그러나 내일 볼게 될 것입니다. (내 아이폰의 Im입니다.) – jazzytomato

+0

예. 저는 거꾸로했으나 내 전화에서 편집 할 수없는 것을 알아 챘습니다. 'then'과 'else'내용을 뒤집습니다 :-) – jazzytomato

3

yyyy-mm-15 형식으로 현재 날짜를 포맷하고 현재 날짜와 비교하여 현재 날짜와 비교하고 오늘 날짜가 나중에 오늘이면 1 개월을 뺍니다.

그건 내가 ANSI SQL에서 할 것입니다 ...하지만 분명히, MS SQL Server는 "간격"을 모릅니다. 자, 대신 DateAdd을 사용할 수 있습니다.

DateAdd() - 지정된 날짜에 간격을 추가하여 새로운 datetime 값을 반환합니다. 첫 번째 매개 변수는 새 값을 반환 할 날짜 부분을 지정합니다. yy (yyyy)는 연도, mm (m)은 월, dd (d)는 Day 등입니다. 예를 들면 다음과 같습니다. select dateadd (d, 2, getdate()) - 현재 날짜에 2 일을 더하고 새 날짜를 반환합니다.

관련 문제