복붙노트

[SQL] 절은 특정 달의 모든 레코드를 찾기 위해 WHERE

SQL

절은 특정 달의 모든 레코드를 찾기 위해 WHERE

내가 저장 프로 시저 년, 월을 줄 수 있기를 원하고 내가 몇 개월 등 일의 서로 다른 번호를 가지고 사이에 비교할 수 없습니다 나는이 작업을 수행 할 방법은 그 달에 일어나는 모든 일을 반환해야?

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 난 그냥 연도와 월을 기준으로 비교 될까요?

감사.

해결법

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

    1.나는 당신이 찾고있는 기능이 MONTH (날짜)라고 생각합니다. 당신은 아마 너무 사용 '년'으로 할 것입니다.

    나는 당신이 찾고있는 기능이 MONTH (날짜)라고 생각합니다. 당신은 아마 너무 사용 '년'으로 할 것입니다.

    하자 당신은 다음과 같은 형태라는 테이블 가지가 있다고 가정 :

    id happend_at
    -- ----------------
    1  2009-01-01 12:08
    2  2009-02-01 12:00
    3  2009-01-12 09:40
    4  2009-01-29 17:55
    

    그리고의 당신이 달 2009/01 (헤세이 2009 년) 동안 happened_at이있는 모든 기록을 찾아 실행하려는 가정 해 봅시다. SQL 쿼리는 다음과 같습니다

    SELECT id FROM things 
       WHERE MONTH(happened_at) = 1 AND YEAR(happened_at) = 2009
    

    어느 반환합니다 :

    id
    ---
    1
    3
    4
    
  2. ==============================

    2.응답 대부분의 제안으로 연도와 기능을 사용하면 SQL Server가 날짜 열이있을 수있는 인덱스를 사용 할 수 없다는 단점이있다. 이 대형 테이블의 성능을 죽일 수 있습니다.

    응답 대부분의 제안으로 연도와 기능을 사용하면 SQL Server가 날짜 열이있을 수있는 인덱스를 사용 할 수 없다는 단점이있다. 이 대형 테이블의 성능을 죽일 수 있습니다.

    나는 당신이 관심있는 달 1 일을 나타내는 저장 프로 시저 (예를 들어, @StartDate) 날짜 시간 값을 전달하는 경향 될 것이다.

    그런 다음 사용할 수 있습니다

    SELECT ... FROM ...
    WHERE DateColumn >= @StartDate 
    AND DateColumn < DATEADD(month, 1, @StartDate)
    

    저장 프로 시저에 대한 별도의 매개 변수로 월과 연도 통과해야하는 경우는 위와 같이 진행 CAST 및 CONVERT를 사용하여 달 1 일을 나타내는 DATETIME를 생성 할 수 있습니다. 이렇게하면 내가 정수 년, 월, 일 값, 예를 들어,에서 DATETIME을 생성하는 기능을 작성하는 것이 좋습니다 는 A SQL 서버 블로그에서 다음과 같습니다.

    create function Date(@Year int, @Month int, @Day int)
    returns datetime
    as
        begin
        return dateadd(month,((@Year-1900)*12)+@Month-1,@Day-1)
        end
    go
    

    쿼리는 다음이된다 :

    SELECT ... FROM ...
    WHERE DateColumn >= Date(@Year,@Month,1)
    AND DateColumn < DATEADD(month, 1, Date(@Year,@Month,1))
    
  3. ==============================

    3.월과 년 기능에 대한 대안으로 WHERE 절 너무 작동합니다 일반 :

    월과 년 기능에 대한 대안으로 WHERE 절 너무 작동합니다 일반 :

    select *
    from yourtable
    where '2009-01-01' <= datecolumn and datecolumn < '2009-02-01'
    
  4. ==============================

    4.더 하나의 팁 매우 간단합니다. 또한 TO_CHAR 기능, 모양을 사용할 수 있습니다 :

    더 하나의 팁 매우 간단합니다. 또한 TO_CHAR 기능, 모양을 사용할 수 있습니다 :

    달 : TO_CHAR (happened_at는 'MM')는 01 = 올해의 경우 : TO_CHAR (happened_at은 'YYYY')는 2009 = 일 경우 :

    TO_CHAR 함수는 SQL 언어가 아니라 하나의 특정 데이터베이스에 의해 지원됩니다.

    나는 희망 도움말 사람 더 ...

    부분!

  5. ==============================

    5.당신은 SQL 서버, DATEPART에 모양을 사용하는 경우.

    당신은 SQL 서버, DATEPART에 모양을 사용하는 경우.

    http://msdn.microsoft.com/en-us/library/ms174420(SQL.90).aspx

    DATEPART (mm가 [날짜는 AT를 찾고])

    당신은 다음과 일반 정수 논리를 사용할 수 있습니다. 같은 해에 대해, 단지 대신 mm의 전년 동기 대비 사용합니다.

  6. ==============================

    6.당신은 할 수 있습니다. 여기에 AdventureWorks 예제 데이터베이스를 사용하여 간단한 예입니다 ...

    당신은 할 수 있습니다. 여기에 AdventureWorks 예제 데이터베이스를 사용하여 간단한 예입니다 ...

    DECLARE @Year       INT
    DECLARE @Month      INT
    
    SET @Year = 2002
    SET @Month = 6
    
    SELECT 
        [pch].* 
    FROM 
        [Production].[ProductCostHistory]   pch
    WHERE
        YEAR([pch].[ModifiedDate]) = @Year
    AND MONTH([pch].[ModifiedDate]) = @Month
    
  7. ==============================

    7.I는 예를 들어 한 달 쉽게이 경우 (예컨대 DATETIME) 다음주기의 시작 및 종료 날짜를 찾을 구체적 DATEADD 및 DATEPART 시간적 기능을 사용하여, 시간적 데이터 형식으로 값을 전달하기 위해 발견 현재 월의 시작 날짜와 종료 날짜 쌍, 단지 형 DATETIME의의 매개 변수 당신을 위해 CURRENT_TIMESTAMP 대체이 발견합니다 (1990-01-01 값이 완전히 임의 주) :

    I는 예를 들어 한 달 쉽게이 경우 (예컨대 DATETIME) 다음주기의 시작 및 종료 날짜를 찾을 구체적 DATEADD 및 DATEPART 시간적 기능을 사용하여, 시간적 데이터 형식으로 값을 전달하기 위해 발견 현재 월의 시작 날짜와 종료 날짜 쌍, 단지 형 DATETIME의의 매개 변수 당신을 위해 CURRENT_TIMESTAMP 대체이 발견합니다 (1990-01-01 값이 완전히 임의 주) :

    SELECT DATEADD(M, 
              DATEDIFF(M, '1990-01-01T00:00:00.000', CURRENT_TIMESTAMP), 
              '1990-01-01T00:00:00.000'), 
           DATEADD(M, 
              DATEDIFF(M, '1990-01-01T00:00:00.000', CURRENT_TIMESTAMP), 
              '1990-01-31T23:59:59.997')
    
  8. ==============================

    8.이 같은 뭔가를해야한다 :

    이 같은 뭔가를해야한다 :

    select * from yourtable where datepart(month,field) = @month and datepart(year,field) = @year
    

    레코드를 생성 할 때 또는 당신은 자신의 열로 월 및 연도 밖으로 분할 수 한 다음에 선택합니다.

    이안

  9. ==============================

    9.한 가지 방법은 달 (즉, 2009년 5월 1일)의 첫 번째 나타내는 변수를 생성, 어느 시저로 전달하거나 (CONCATENATE 월 / 일 / 년)을 구축하는 것입니다. 그런 다음 참조 DateDiff 함수를 사용합니다.

    한 가지 방법은 달 (즉, 2009년 5월 1일)의 첫 번째 나타내는 변수를 생성, 어느 시저로 전달하거나 (CONCATENATE 월 / 일 / 년)을 구축하는 것입니다. 그런 다음 참조 DateDiff 함수를 사용합니다.

    WHERE DateDiff(m,@Date,DateField) = 0
    

    이 일치하는 월과 연도로 아무것도 반환됩니다.

  10. ==============================

    10.

    SELECT * FROM yourtable WHERE yourtimestampfield LIKE 'AAAA-MM%';
    

    AAAA가 올해는 어디에서 원하는 MM 원하는 달

  11. from https://stackoverflow.com/questions/851236/where-clause-to-find-all-records-in-a-specific-month by cc-by-sa and MIT license