Like 패턴 검색시 mm [d]d yyyy hh:mm[AM or PM] 패턴으로 검색해주시면 됩니다. datetime 인 데이터를 convert
(varchar,registerDate) 해주시면 패턴을 알수 있습니다. 주의하실점은 일자일 경우 10일 이하인 9일 같은 경우 앞에
스페이스를 두개 넣어 검색하셔야 한다는 점입니다. _를 스페이스라 하면 5월 2일 검색시.... like '05__2%' 로 하시면
됩니다. 다만 초검색은 Like 검색으로 안됩니다. ms(미리세컨) 까지 검색시는 Between 검색 또는 convert(char
(23),getdate(),121) 로 해 주셔야 합니다.
다음을 실행해 보세요
-------------------------------------------------------------
if object_id('Product') is not null
drop table Product
create table Product(sid int identity,registerDate datetime)
insert Product values('2009-07-01')
insert Product values('2008-07-01')
insert Product values('2007-05-02 12:12:12.997')
2009년 7월 검색시
select *
from Product
where registerDate LIKE '07 [0-9 ][0-9] 2009%'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
1 2009-07-01 00:00:00.000
(1개 행 적용됨)
7월 1일 검색시
select *
from Product
where registerDate LIKE '07 1%'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
2 2008-07-01 00:00:00.000
1 2009-07-01 00:00:00.000
(2개 행 적용됨)
2008년 검색시
select *
from Product
where registerDate LIKE '[0-1][0-9] [0-9 ][0-9] 2008%'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
2 2008-07-01 00:00:00.000
(1개 행 적용됨)
7월 검색시
select *
from Product
where registerDate LIKE '07%'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
2 2008-07-01 00:00:00.000
1 2009-07-01 00:00:00.000
(2개 행 적용됨)
1일 검색시
select *
from Product
where registerDate LIKE '[0-1][0-9] 1%'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
2 2008-07-01 00:00:00.000
1 2009-07-01 00:00:00.000
(2개 행 적용됨)
오후 12시 검색
select *
from Product
where registerDate LIKE '[0-1][0-9] [0-9 ][0-9] [1-9][0-9][0-9][0-9] 12:[0-9][0-9]PM'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
3 2007-05-02 12:12:12.997
(1개 행 적용됨)
0분 검색
select *
from Product
where registerDate LIKE '[0-1][0-9] [0-9 ][0-9] [1-9][0-9][0-9][0-9] [0-1][0-9]:00%'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
2 2008-07-01 00:00:00.000
1 2009-07-01 00:00:00.000
(2개 행 적용됨)
오후 검색
select *
from Product
where registerDate LIKE '[0-1][0-9] [0-9 ][0-9] [1-9][0-9][0-9][0-9] [0-1][0-9]:[0-5][0-9]PM'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
3 2007-05-02 12:12:12.997
(1개 행 적용됨)
Between 을 이용 특정 일자 범위를 검색
2007년 5월 2일 12시부터 자정까지 검색시
select *
from Product
where registerDate between '2007-05-02 12:00' and '2007-05-02 23:59:59.997'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
3 2007-05-02 12:12:12.997
(1개 행 적용됨)
2009년 7월 1일 검색시
select *
from Product
where registerDate between '2009-07-01' and '2009-07-01 23:59:59.997'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
1 2009-07-01 00:00:00.000
(1개 행 적용됨)
2009년 7월 검색시
select *
from Product
where registerDate between '2009-07-01' and '2009-07-31 23:59:59.997'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
1 2009-07-01 00:00:00.000
(1개 행 적용됨)
2009년 검색시
select *
from Product
where registerDate between '2009-01-01' and '2009-12-31 23:59:59.997'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
1 2009-07-01 00:00:00.000
(1개 행 적용됨)
성능은 떨어지지만 다른 검색방법으로는
2009년 7월 검색시
select *
from Product
where convert(char(7),registerDate,120) = '2009-07'
order by sid desc
sid registerDate
----------- ------------------------------------------------------
1 2009-07-01 00:00:00.000
(1개 행 적용됨)
같이 datetime형을 char 형으로 변경하시고 검색하셔도 됩니다.
convert 시 convert(char(10),registerDate,120) 는 YYYY-MM-DD convert(char(8),registerDate,112) 는
YYYYMMDD convert(char(10),registerDate,111) 는 YYYY/MM/DD 형태로 변경됩니다. 자세한 내용은 도움말의
CAST 및 CONVERT 를 참고하세요.
단, 조건절이 되는 컬럼에 손을 대는건 퍼포먼스 측면에서 부하가 뒤따릅니다
//12월에 해당하는 데이터 셀렉트
select * from poll_p_ref where w_date like '12%'
//2006년 12월에 해당하는 데이터 셀렉트
select * from poll_p_ref where convert(char(7),w_date,120) = '2006-12'
//2006년 12월에 해당하는 데이터를 다른 테이블에 인서트시키기
insert into poll_p_ref_bak (no, p_title, w_date, ip_info, temp1, temp2, temp3 )
(select no, p_title, w_date, ip_info, temp1, temp2, temp3
from poll_p_ref
where convert(char(7),w_date,120) = '2006-12')
[출처] MS-SQL datetime 데이터형 컬럼 검색 |작성자 빛나는
'Databases' 카테고리의 다른 글
Join의 모든것.(LEFT OUTER, RIGHT OUTER, INNER, FULL OUTER, CROSS) (0) | 2011.04.13 |
---|---|
MS-SQL DATETIME 형변환(CONVERT) (0) | 2011.03.04 |
MS-SQL 2008 설치 (0) | 2011.01.05 |
MS-SQL 제한 시간이 만료되었습니다 (0) | 2010.09.03 |
테이블 생성 및 삭제하기 (0) | 2010.08.30 |