database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 3575 게시물 읽기
No. 3575
convert 관련 질문입니다.
작성자
함수
작성일
2007-06-19 13:11
조회수
4,197

2007-06-06 13:07:00 이런 date type 을

like 로 조회 하니 되질 않아서...


결국은 


select productcd ,endtime from t

where convert(varchar(10),(endtime),121) like '2007-06%'  이런식으로 convert를 해 버렸습니다. 


해당열이 partition table로 묶여 있으며.. 워낙 데이터가 많아서... endtime 에 인덱스를 태워야 되는데..


오라클의 경우 function base index 를 줄수 있는데... ms 는 그렇지 못하더군요...


방법이 있을까요?

이 글에 대한 댓글이 총 2건 있습니다.

oracle의 function based index를 생각하지 마시구요 

지금의 쿼리를 보건데 6월달을 조회하는 것인듯한데요. 이렇게 하면 안될까요? 


select productcd, endtime from t 

where endtime between '20070601' and '20070630'

.님이 2007-06-19 13:25에 작성한 댓글입니다. Edit

앞서 답하신 분의 개념은 맞지만 MS_SQL에서 원하는 결과를 보여주지는 않습니다.

칼럼이 변형이 되면 인덱스를 타지 않는 것은 아실 것으로 생각합니다.


WHERE endtime > '2007-06-01'

  AND endtime < '2007-07-01'


이렇게 써야지만 원하는 결과를 얻을 수 있습니다.

'yyyy-mm-dd' 이 폼은 MS_SQL에서 날짜 형식의 ISO 표준이므로 MS-SQL은 암시적으로 datetime으로 인식합니다.

그리고 BETWEEN '2007-06-01' AND '2007-06-30' 으로 하면 

'2007-06-30' 를 '2007-06-30 00:00:00.000'으로 인식하기 때문에 

'2007-06-30 00:00:00.001'부터 '2007-06-30 23:59:59.999' 사이의 데이터

즉 '2007-06-30'일의 하루 데이터를 놓치게 됩니다.

공즉시공님이 2007-06-20 00:34에 작성한 댓글입니다.
이 댓글은 2007-06-20 00:41에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3578case when 문 가르쳐 주세요.. [1]
장민기
2007-06-20
3379
3577sp_addlinkedserver 질문입니다 [1]
권용재
2007-06-19
2482
3576자릿수 문제.. [1]
mssql
2007-06-19
4296
3575convert 관련 질문입니다. [2]
함수
2007-06-19
4197
3574쿼리문제 입니다. [2]
쿼리
2007-06-19
2343
3573테이블간 COUNT(*)를 구하려고 하는데요..넘 어려워요 [4]
초짜잉잉
2007-06-18
6582
3572DB 서버 성능 향상을 위해 고려하고 있는 사항입니다. 조언 부탁드립니다. [1]
최성
2007-06-18
3358
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다