검색 조건에 특정 기간(datetime)을 주어 조회할 경우 잠깐! 생각해 보자~!
예를 들어 2007-01-01 ~ 2007-01-10의 기간동안 가입한 회원 목록을 조회해야 한다면~
BETWEEN이나.. >= <= 를 이용하여... [ EX1 ]과 같은 방법으로 많이 한다~!
간단히 생각하믄... 맞는결과가 나올듯 하지만... 그렇지 않다.
검색필드가 datetime형식이므로 [년-월-일]은 [년-월-일 00시 00분 000초]인 셈이다.
그래서 [ EX1 ]의 방법을 이용할 경우 2007-01-10의 데이터도 조회되길 원하였으나 결과는 그렇지 못할 것이다.
그래서..[ EX2 ]처럼... 조회하였다... 훔... 허접해. 보인닷!~~~ 그러나 결과는.. 굿~!
그럼... [EX3]은?? 마지막날에 +1일을 더하여 마지막날의 데이터도 포함할 수 있도록 하는것이다~..
그중에.. 이게 젤루 맘에 든다...
물론.. 2007-01-11 00:00:000 인 데이터가 존재한다면... 이건 에러다 -_-;;
하루를 더한것에서 -1 millisecond를 빼? ㅋㅋ (생략하겠음~ -_-;;)
마지막으로.. [EX4]는 필드값을 [YYYY-MM-DD]형식으로 변형하여 조회할 수도 있겠다~
그러나 값을 변형하여.. 보여주는것도 그렇고.. 인덱스도 안걸어 놓겠지만.. 만약 있다면 인덱스 걸리지도 않을꺼구... 맘에.. 안든다..
암튼 방법이야 많겠지만... [ EX1 ]처럼... 틀린 검색 조건을 주어서는 안된다는걸.. 말하고 싶을 뿐이닷~
-- [ EX1 ]
SELECT *
FROM dbo.MEMBER
WHERE 등록일시 BETWEEN '2007-01-01' AND '2007-01-10'
-- [ EX2 ]
SELECT *
FROM dbo.MEMBER
WHERE 등록일시 BETWEEN '2007-01-01' AND '2007-01-10 59:59:999'
-- [ EX3]
SELECT *
FROM dbo.MEMBER
WHERE 등록일시 BETWEEN '2007-01-01' AND DATEADD(DAY, 1, '2007-01-10')
-- [ EX4]
SELECT *
FROM dbo.MEMBER
WHERE CONVERT(VARCHAR(10), 등록일시, 121) BETWEEN '2007-01-01' AND '2007-01-10'
'데이터베이스 > SQL Server' 카테고리의 다른 글
[MSSQL2005] CTE(공통 테이블 식) (0) | 2008.04.28 |
---|---|
[MSSQL2005] 스키마테이블을 이용하여 테이블 정보 알아내기 (0) | 2008.04.28 |
[MSSQL2005] LIKE 검색시 [ ] 와일드카드사용하기 (0) | 2008.04.28 |
[MSSQL2005] 순위함수 (ROW_NUMBER, RANK, DENSE_RANK, NTILE) (0) | 2008.04.28 |
DB별 제약 조건을 쿼리로 뽑기 (0) | 2008.04.28 |