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
운영게시판
최근게시물
DB2 Q&A 1797 게시물 읽기
No. 1797
like문과 유사한 검색방법을 알고 싶어요....
작성자
박재홍(cdncom)
작성일
2009-01-13 15:28
조회수
11,072

TABLE명 : TEST

 

WORKDATE PAY

200803 100

200804 110

200805 115

200901 120

 

 

 

SELECT WORKDATE, PAY

FROM TEST

WHERE WORKDATE LIKE '2008%'

 

실행하면 결과는

 

WORKDATE PAY

200803 100

200804 110

200805 115

이렇게 나오는데

 

위 쿼리문을 WORKDATE컬럼의 값을 입력받는것으로 하여

1.값이 들어올면 그 조건에 맞는것을 보여주고

2.값이 안들어 올때는 전체를 보여 줄려고 하는데

아래 쿼리문처럼 LIKE문을 사용안하는 방법을 알고 싶어요

 

SELECT WORKDATE, PAY

FROM TEST

WHERE WORKDATE LIKE :TEST

위 문장으로 하면 값이 안들어 올때는 검색이 한건도 안됨.

 

 

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

case를 사용해보세요


SELECT WORKDATE, PAY

FROM TEST

WHERE WORKDATE LIKE (case when ''='' then '_%' else 'AA%' end);

조는냥이님이 2009-01-13 17:09에 작성한 댓글입니다. Edit

LIKE 문을 사용하지 않고는 방법이 없나요?

박재홍(cdncom)님이 2009-01-13 18:21에 작성한 댓글입니다.


값이 들어오지 않은 경우 

SELECT WORKDATE, PAY
FROM TEST
WHERE WORKDATE LIKE (case when ''='' then '_%' else '%' end); 

입력이 있는경우 

SELECT WORKDATE, PAY
FROM TEST
WHERE WORKDATE LIKE (case when ''='2008' then '_%' else '2008%' end); 

조건이 있는경우는 like를 사용하는게 가장 좋은 방법 같습니다. 


컬럼 변경을 하게 되면 index를 사용할 수 없습니다.

SELECT WORKDATE, PAY
FROM TEST
WHERE substr(WORKDATE,1,4) = '2008'


비교 연산이 있었네여.. 
SELECT WORKDATE, PAY
FROM TEST
WHERE WORKDATE >'' 

WHERE WORKDATE >'2008'


조는냥이님이 2009-01-13 18:34에 작성한 댓글입니다.
이 댓글은 2009-01-13 20:13에 마지막으로 수정되었습니다. Edit

조는냥이님 감사합니다.

그런데 저가 설명을 잘못했는것 같습니다. 저가 하고자 하는것은

SELECT WORKDATE, PAY

FROM TEST

WHERE WORKDATE LIKE :INPUT_WORKDATE

위 쿼리실행시 :INPUT_WORKDATE 에 2008을 입력하면 

WORKDATE   PAY

200803           100

200804           110

200805           115

이렇게 나오는데

위 쿼리실행시 :INPUT_WORKDATE 에 아무것도  입력하지 않을시

WORKDATE   PAY

200803           100

200804           110

200805           115

200901           120

전체가 다 검색될수 있도록 하고자 합니다.

즉, :INPUT_WORKDATE에 검색하고자 하는 값을 입력하여 검색하는데

아무것도 없는 상태일때는 전체를 검색하는 쿼리를 만들고 싶어요

WORKDATE는 INDEX로 잡혀 있어서 되도록 LIKE문을 사용하지 않는 방법을 찾고 있습니다.



WITH TBL_NULL AS (

                         SELECT WORKDATE, PAY FROM TEST

                          ),

         TBL_NOML AS (

                          SELECT WORKDATE, PAY FROM TEST WHERE WORKDATE

                                                                                =  :INPUT_WORKDATE

                            )

여기에서 :INPUT_WORKDATE 가 ''인지 아닌지를 비교해서

THEN 이면 SELECT * FROM TBL_NULL을 실행

ELSE 이면 SELECT * FROM TBL_NOML을 실행하도록

쿼리문에서 비교할 수 있도록 쿼리가 가능할지.....



박재홍(cdncom)님이 2009-01-14 10:25에 작성한 댓글입니다.
이 댓글은 2009-01-14 11:02에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
1802디비 분양합니다..
김형
2009-01-20
9244
1800COUNT(*) 비교여 [1]
초보예여
2009-01-19
11504
1799WHERE절에다 조건문을 넣을수 있을까요? [1]
김한중
2009-01-19
10409
1797like문과 유사한 검색방법을 알고 싶어요.... [4]
박재홍
2009-01-13
11072
1796[롤백관련] sql 실행시 rollback시키는 방법 [3]
왕초보
2009-01-09
10451
1795DB2 에서 오라클 연결.. [2]
왕모름
2009-01-09
11143
1794UNION ALL 사용시 FETCH FIRST 1 ROWS ONLY 사용 가능 여부 [2]
김성훈
2009-01-08
11783
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다