복붙노트

[SQL] SQL 빼기 정확히 년

SQL

SQL 빼기 정확히 년

우선 저를 도와 주셔서 감사 모든 사람에게 원하는, 내가이 작업을 수행하는 방법에 나에게 많은 아이디어를주고 난 그냥 쿼리로 퍼팅의 도움이 필요합니다 내 자신의 방법을 함께했다

I는 입력 A 날짜에 사용자가, 현재 해 얻을합니다. 두 빼기하고 모든 사람이 게시했다는 DATEADD을한다. 이 가능하고 할 수있는 가장 좋은 방법은 무엇입니까?

year(getdate())-@DYYYY=Y 
dateadd(year,-Y,getdate())

해결법

  1. ==============================

    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. ==============================

    2.이 옵션을 사용합니다 :

    이 옵션을 사용합니다 :

    dateadd(year, -1, getdate())
    
  3. ==============================

    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. ==============================

    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. ==============================

    5.

    select DATEADD(yy, -1, getdate())
    
  6. ==============================

    6.2 년 전 날짜를 얻을 수있는 가장 간단한 방법은 다음과 같습니다

    2 년 전 날짜를 얻을 수있는 가장 간단한 방법은 다음과 같습니다

    SELECT GETDATE() - 365
    
  7. from https://stackoverflow.com/questions/4247060/sql-subtract-exactly-a-year by cc-by-sa and MIT license