2012-01-05 4 views
2

나는 생일을 포함하는 많은 레코드를 가진 테이블을 가지고있다. 필드는 varchar이고 각 레코드의 형식은 yyyy/mm/dd입니다 (예 : 1903/11/27).날짜 형식의 varchar 필드로 작업하는 방법은 무엇입니까?

1 월 1 일과 10 월 사이에 생일이있는 레코드를 확인하는 가장 좋은 방법은 무엇입니까?

현재 나의 생각은 RIGHT 함수를 사용하고 dd와 mm 값을 새 임시 테이블의 두 개의 개별 열로 캡처하는 것입니다. 끝나면 "AND"를 사용하여 원하는 레코드를 가져옵니다.

그래서의 라인을 따라 뭔가 :

SELECT * from BIRTHDAYS where (DateBday >= 1 AND DateBday < 11) and (MonthBday = 1) 

는 쉬운 방법이 있나요?

+3

'DATETIME'으로 변환 - 결국 날짜 인 경우 - 적절한 데이터 유형에 저장하지 않으시겠습니까 ?? –

+0

수개월 간 검색이 이루어져야합니까? 이것은 현재 설정에 문제가 될 것입니다 (제 생각에는). – jadarnel27

+1

글쎄, 나는 DBA가 아니기 때문에이 경우 옵션이 아니다. 하지만 임시 테이블로 이동 한 다음 적절한 형식으로 저장했습니다. 그런 다음 DATEPART 함수를 사용하여 내가 찾고 있던 레코드를 월과 일 (1 년을 원하지 않기 때문에) 얻습니다. – Ray

답변

0

DateTime 유형으로 변환 한 다음 BETWEEN을 사용할 수 있습니다.

Where CONVERT(DATE, BirthDayField) BETWEEN STARTDATE AND ENDDATE 
2

당신은 사용할 수 있습니다

SELECT * 
FROM Birthdays 
WHERE CONVERT(DATE, bDayField) BETWEEN '2011/1/1' AND '2011/1/10' 

는 (I 텍스트로 생일을 포함하여 현재 varchar 필드의 이름으로 bDayField을 사용하고 있습니다).

이렇게하면 varchar 필드가 BETWEEN 연산자를 사용할 수있는 날짜로 변환됩니다. 멋진 깨끗한 WHERE 절있게, 나는)

주 = 생각 : 당신은 정말 생각이 열의 적절한 Date, DateTime, 또는 DateTime2 데이터 유형을 사용해야합니다. 앞으로는 변경하기가 가장 쉬울 수도 있습니다 - 장래에 두통을 덜어 줄 수 있습니다.

+0

thanks @ jadarnel27. 그러나 나는 그들이 태어난 해에 관계없이 기록을 찾아야합니다. 그렇지만 나는 일을 너무 복잡하게 만듭니다. 그것을 변환하는 것이 가장 쉬운 해결책 인 것 같습니다. – Ray

관련 문제