본문 바로가기

MSSQL

MS-SQL datetime 데이터형 컬럼 검색

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 를 참고하세요.

'MSSQL' 카테고리의 다른 글

CAST 및 CONVERT  (0) 2007.08.09
Replicate 함수 - 반복,복제  (0) 2007.08.09
mssql 랜덤 정렬  (0) 2007.08.09
기본 함수  (0) 2007.08.09