발견 날짜는 &입니다. 다음과 같이 어떤 경우에, 당신은 가상 날짜를 만들 수 있습니다이 경우
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';
당신은 동일한 결과를 얻을 수 있었으나 올해는 완전히 무시된다.
나는 3 월 21 일부터 4 월 20 일까지 모든 사람의 생일을 찾고 있습니다. 따라서 입력 한 것처럼 내년을 입력 할 수 없습니다. 다른 달의 데이터는 BGR = 'S'또는 BGR = 'SL' – GiveChance
@GiveChance 그게 핵심입니다. 이 표현식은 현재 연도의 새 날짜를 만듭니다. – Manngo
그냥 같은 방법 DATEFROMPARTS (year (getdate()), 03,21) 및 DATEFROMPARTS (year (getdate()), 04,20) – luly