[SQL] SQL 빼기 정확히 년
SQLSQL 빼기 정확히 년
우선 저를 도와 주셔서 감사 모든 사람에게 원하는, 내가이 작업을 수행하는 방법에 나에게 많은 아이디어를주고 난 그냥 쿼리로 퍼팅의 도움이 필요합니다 내 자신의 방법을 함께했다
I는 입력 A 날짜에 사용자가, 현재 해 얻을합니다. 두 빼기하고 모든 사람이 게시했다는 DATEADD을한다. 이 가능하고 할 수있는 가장 좋은 방법은 무엇입니까?
year(getdate())-@DYYYY=Y
dateadd(year,-Y,getdate())
해결법
-
==============================
1.하드 코딩 해 값에 대한 귀하의 의견을 바탕으로, 사용
하드 코딩 해 값에 대한 귀하의 의견을 바탕으로, 사용
DATEDIFF(year,BOOKED,GETDATE())
당신이 잘하면 당신이 후에있는 방향으로 당신을 이끌해야 후있어 일부터 년의 수를 얻을 수 있습니다.
당신은 아마 같은 끝낼 것입니다 :
SELECT DATEADD(year, -DATEDIFF(year,BOOKED,GETDATE()), GETDATE())
좋아, 더 당신이 정말로 원하는 모든처럼 보이는 (내가 잘못 될 수있다, 미안 그렇다면) 그룹에 연도 별 예약입니다.
다음 도움말의 결과는 달성 할 것인가?
SELECT SDESCR,DATEADD(YEAR, DATEDIFF(YEAR, 0, BOOKED),0), Sum(APRICE) as Total, Sum(PARTY) as PAX FROM DataWarehouse.dbo.B01Bookings AS B101Bookings GROUP BY SDESCR,DATEADD(YEAR, DATEDIFF(YEAR, 0, BOOKED),0)
내가 말했듯이,이 목표, 질문에 반드시 대답에 관해서는 추측이다.
-
==============================
2.이 옵션을 사용합니다 :
이 옵션을 사용합니다 :
dateadd(year, -1, getdate())
-
==============================
3.날짜에서 년을 빼려면 단순히 DATEADD () 함수를 사용하여
날짜에서 년을 빼려면 단순히 DATEADD () 함수를 사용하여
SELECT DATEADD(year, -1, GETDATE())
편집 :
SELECT SDESCR,DYYYY, Sum(APRICE) as Total, Sum(PARTY) as PAX FROM DataWarehouse.dbo.B01Bookings AS B101Bookings WHERE (BOOKED <= Convert(int, Convert(datetime, Convert(varchar, DatePart(month, GETDATE())) + '/' + Convert(varchar, DatePart(day, GetDate())) + '/' + DYYYY)) Group By SDESCR,DYYYY Order by DYYYY
2 편집 :
난 그냥이 문을 실행
select Convert(datetime, Convert(varchar, DatePart(month, GETDATE())) + '/' + Convert(varchar, DatePart(day, GetDate())) + '/' + '2007')
어떤 벌금을 실행합니다. 그래서 제 질문은 DYYYY 열 무엇을 저장한다? 그것은 항상 널 (null)을 포함 할 수있는 유효한 년이 포함되어 있습니까?
-
==============================
4.OK ... 조 스테파넬 리에 대한 응답에서, 나는 당신이 정말로 무엇을하려고의 일부는 매년 쿼리를 다시 작성하는 것을 피하기이라고 생각합니다. 그런 경우라면, 당신은 숫자 테이블을 만들 수 있습니다. 간단하고 빠른 예는 다음과 같이 될 것입니다 ...
OK ... 조 스테파넬 리에 대한 응답에서, 나는 당신이 정말로 무엇을하려고의 일부는 매년 쿼리를 다시 작성하는 것을 피하기이라고 생각합니다. 그런 경우라면, 당신은 숫자 테이블을 만들 수 있습니다. 간단하고 빠른 예는 다음과 같이 될 것입니다 ...
SELECT TOP 3000 IDENTITY(INT,1,1) as N INTO #Numbers FROM Master.dbo.SysColumns sc1, Master.dbo.SysColumns sc2
1부터 3000까지의 정수 인스턴트 테이블.
이것은 당신이 당신의 쿼리에 대한 #Numbers 테이블에 대해 조인 또는 부속 선택 할 수 있습니다. 좀 더 제한된 범위를 확인하려면, 당신은 당신이 좋아하는 년 (또는 같은 테이블에 동적으로 만들 것 테이블 반환 함수)와 테이블을 만들 수 있습니다.
당신은 또한 그것을 조금 더 걸릴 두 개의 열 결과를 반환하는 테이블 반환 함수를 구현할 수
year offset 2010 0 --Produced from DATEPART(y,GETDATE()) 2009 -1 --loop/set subtract 1 2008 -2 --repeat until you have enough...
이 방법은, 당신의 where 절은 같은 것을 읽을 수
SELECT * FROM yourTable, yourFunction WHERE ((DYYYY = CAST(yourFunction.year as VARCHAR) AND (BOOKED <= DATEADD(yy, yourFunction.offset, GETDATE()))
TV를 기능 매년 프로그래밍 당신에게 유지 보수의 비트를 저장해야하는 동안, 당신은 약간의 성능 히트 고통 수도 있습니다.
-
==============================
5.
select DATEADD(yy, -1, getdate())
-
==============================
6.2 년 전 날짜를 얻을 수있는 가장 간단한 방법은 다음과 같습니다
2 년 전 날짜를 얻을 수있는 가장 간단한 방법은 다음과 같습니다
SELECT GETDATE() - 365
from https://stackoverflow.com/questions/4247060/sql-subtract-exactly-a-year by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 GROUP BY와 리턴 수 0 (0) | 2020.07.13 |
---|---|
[SQL] 지정한 캐스트가 검색 중 SCOPE_IDENTITY 동안 유효하지 않습니다 (0) | 2020.07.13 |
[SQL] 나는 여러 테이블에서 같은 열이 있고, 특정 값으로 모든 테이블에서 해당 열을 업데이트 할. 이걸 어떻게 할 수 있습니까? (0) | 2020.07.13 |
[SQL] 어떻게 행으로 열을 선택하려면? (0) | 2020.07.13 |
[SQL] 오라클은 외래 키를 얻을 수 (0) | 2020.07.13 |