[SQL] 절은 특정 달의 모든 레코드를 찾기 위해 WHERE
SQL절은 특정 달의 모든 레코드를 찾기 위해 WHERE
내가 저장 프로 시저 년, 월을 줄 수 있기를 원하고 내가 몇 개월 등 일의 서로 다른 번호를 가지고 사이에 비교할 수 없습니다 나는이 작업을 수행 할 방법은 그 달에 일어나는 모든 일을 반환해야?
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 난 그냥 연도와 월을 기준으로 비교 될까요?
감사.
해결법
-
==============================
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.응답 대부분의 제안으로 연도와 기능을 사용하면 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.월과 년 기능에 대한 대안으로 WHERE 절 너무 작동합니다 일반 :
월과 년 기능에 대한 대안으로 WHERE 절 너무 작동합니다 일반 :
select * from yourtable where '2009-01-01' <= datecolumn and datecolumn < '2009-02-01'
-
==============================
4.더 하나의 팁 매우 간단합니다. 또한 TO_CHAR 기능, 모양을 사용할 수 있습니다 :
더 하나의 팁 매우 간단합니다. 또한 TO_CHAR 기능, 모양을 사용할 수 있습니다 :
달 : TO_CHAR (happened_at는 'MM')는 01 = 올해의 경우 : TO_CHAR (happened_at은 'YYYY')는 2009 = 일 경우 :
TO_CHAR 함수는 SQL 언어가 아니라 하나의 특정 데이터베이스에 의해 지원됩니다.
나는 희망 도움말 사람 더 ...
부분!
-
==============================
5.당신은 SQL 서버, DATEPART에 모양을 사용하는 경우.
당신은 SQL 서버, DATEPART에 모양을 사용하는 경우.
http://msdn.microsoft.com/en-us/library/ms174420(SQL.90).aspx
DATEPART (mm가 [날짜는 AT를 찾고])
당신은 다음과 일반 정수 논리를 사용할 수 있습니다. 같은 해에 대해, 단지 대신 mm의 전년 동기 대비 사용합니다.
-
==============================
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.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.이 같은 뭔가를해야한다 :
이 같은 뭔가를해야한다 :
select * from yourtable where datepart(month,field) = @month and datepart(year,field) = @year
레코드를 생성 할 때 또는 당신은 자신의 열로 월 및 연도 밖으로 분할 수 한 다음에 선택합니다.
이안
-
==============================
9.한 가지 방법은 달 (즉, 2009년 5월 1일)의 첫 번째 나타내는 변수를 생성, 어느 시저로 전달하거나 (CONCATENATE 월 / 일 / 년)을 구축하는 것입니다. 그런 다음 참조 DateDiff 함수를 사용합니다.
한 가지 방법은 달 (즉, 2009년 5월 1일)의 첫 번째 나타내는 변수를 생성, 어느 시저로 전달하거나 (CONCATENATE 월 / 일 / 년)을 구축하는 것입니다. 그런 다음 참조 DateDiff 함수를 사용합니다.
WHERE DateDiff(m,@Date,DateField) = 0
이 일치하는 월과 연도로 아무것도 반환됩니다.
-
==============================
10.
SELECT * FROM yourtable WHERE yourtimestampfield LIKE 'AAAA-MM%';
AAAA가 올해는 어디에서 원하는 MM 원하는 달
from https://stackoverflow.com/questions/851236/where-clause-to-find-all-records-in-a-specific-month by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왜 임시 테이블과 부속 사이에 거대한 성능 차이가있다 (0) | 2020.07.21 |
---|---|
[SQL] SQL : 체크 테이블 A의 항목은 테이블 B에있는 경우 (0) | 2020.07.21 |
[SQL] 이 필드를 $ X를 포함하지 않는 SQL 쿼리 (0) | 2020.07.21 |
[SQL] 나는 테이블 설명 (필드 이름과 유형)를 얻을 수있는 방법 Sybase 데이터베이스에서? (0) | 2020.07.21 |
[SQL] 어떻게 하나 개의 출력으로 두 개의 테이블에서 열을 병합 할 수 있습니다? (0) | 2020.07.21 |