2017-05-07 4 views
0

나는 3 월 21 일부터 4 월 20 일까지의 생년월일을 찾고 있으며, 그 해는 중요하지 않습니다. 그리고 다른 달과 데이트를 검색 할 때 나타나는 것 같습니다.SQL에서 생년월일을 찾고

select * from AllStudentInfo Where 
((MONTH(birthDate) >= 3 and day(birthDate) >= 21) 
OR 
(MONTH(birthDate) <= 4 and day(birthDate) <= 20)) 
AND 
(BGRStatus = 'S' OR BGRStatus = 'SL') 

답변

1

발견 날짜는 &입니다. 다음과 같이 어떤 경우에, 당신은 가상 날짜를 만들 수 있습니다이 경우

SELECT DATEFROMPARTS (2017,month(birthDate),day(birthDate) as birthday 
FROM AllStudentInfo 

, 당신은 사용할 수 있습니다

SELECT * 
FROM AllStudentInfo 
WHERE DATEFROMPARTS (2017,month(birthDate),day(birthDate) 
    BETWEEN '2017-03-21' AND '2017-04-20'; 

2017 임의이다. 요점은 BETWEEN 절의 날짜가 같은 해에 있다는 것입니다. 다음과 같이 더 현대적인 기술을 사용하여

, 당신은 그것을 결합 할 수 있습니다 :

WITH cte AS(
    SELECT *,DATEFROMPARTS (2017,month(birthDate),day(birthDate) as birthDay 
    FROM AllStudentInfo 
) 
SELECT * FROM cte WHERE birthDay BETWEEN '2017-03-21' AND '2017-04-20'; 

cte는 하위 쿼리를 사용하는 대신 인 공통 테이블 표현식입니다.

다음은 질문의 정신에 더 가까운 대안입니다. 당신은 & 일 월에게 순전히 표현 생성하는 format 기능을 사용할 수 있습니다 :

format(birthDate,'MM-dd') 

MM은이 자리 개월 수를 말하는 MSSQL의 방법을, 그리고 dd은 달의 2 자리 일이다. 당신이 사용할 수있는

이 방법하십시오 CTE로 다시

format(birthDate,'MM-dd') BETWEEN '03-21' AND '04-20' 

:

WITH cte AS(
    SELECT *,format(birthDate,'MM-dd') as birthDay 
    FROM AllStudentInfo 
) 
SELECT * FROM cte WHERE birthDay BETWEEN '03-21' AND '04-20'; 

당신은 동일한 결과를 얻을 수 있었으나 올해는 완전히 무시된다.

+0

나는 3 월 21 일부터 4 월 20 일까지 모든 사람의 생일을 찾고 있습니다. 따라서 입력 한 것처럼 내년을 입력 할 수 없습니다. 다른 달의 데이터는 BGR = 'S'또는 BGR = 'SL' – GiveChance

+0

@GiveChance 그게 핵심입니다. 이 표현식은 현재 연도의 새 날짜를 만듭니다. – Manngo

+0

그냥 같은 방법 DATEFROMPARTS (year (getdate()), 03,21) 및 DATEFROMPARTS (year (getdate()), 04,20) – luly

0
그렇게

select * from AllStudentInfo Where 
((MONTH(birthDate) >= 3 and day(birthDate) >= 21) 

AND --Make the change here 

(MONTH(birthDate) <= 4 and day(birthDate) <= 20)) 
AND 
(BGRStatus = 'S' OR BGRStatus = 'SL') 

해당 날짜 범위 또는 해당 월의 범위에 아무것도 쿼리하는 OR 사용처럼 AND

에 문을 전환

. 따라서 매월 다른 사람으로부터 결과를 얻을 수 있습니다.

+0

내가 AND로 바뀌면 DATA가 표시되지 않습니다. 생년월일이 03/26 인 학생은 알고 있습니다. – GiveChance

+0

저는 1999-03-26의 데이터를 가지고 있고 BGRStatus는 S이지만 변경 사항을 사용하고 있으면 데이터가 표시되지 않습니다. 나는뿐만 아니라 함께했지만 데이터가 없습니다. – GiveChance