쿼리 질문드립니다. 0 3 1,056

by 나이많은초보 [SQL Query] [2021.01.08 15:29:10]


초보라서 질문의 명확성이 떨어지는 점 양해 부탁 드리고자 합니다.

테이블명 _ tb_manual

컬럼 : no / eng / han /use/ dept /per_num

조회 쿼리를 작성해야 하는데요, 입력창에  한글이 입력되던 영문이 입력되던 상관없이 입력된 값을 보고서 테이블에서 해당 컬럼데이터를 갖고 와야하는 쿼리입니다.

 

입력창의 필드명 : sh_ name

즉 저 sh_name입력창에 영문이든 한글이던 입력하고 조회 버튼을 누르면 조회결과가 나와야 합니다.

SELECT A.UM,
       ,A.HAN,
       ,A.ENG ,
       ,A.per_name
       ,A.dept
       B.DEPTNM,
       C.KORNM
  FROM TB_PRRODUCT_MANUAL A

   LEFT JOIN TB_dept B
          ON A.dept = B.dept

where 1 = 1

(아래부분 쿼리는 제가 작성한것입니다.)

한글/영문-대소문자 구분없이 검색하기
(영문은 대소문자로 필드에 기록해도 검색시에는 소문자통합해서 검색되도록

<isNotEmpty property="PRODUCT_ENG">
     A.PRODUCT_ENG || (lower(PRODUCT_ENG) LIKE '%' || lower ('aa') ||  '%' || chr(10) || chr(12)  || ' ' || '') = #PRODUCT_ENG#
      </isNotEmpty>
      <isNotEmpty prepend="AND" property="PRODUCT_HAN">
        A.PRODUCT_HAN ||  = #PRODUCT_HAN#
       </isNotEmpty>

 

----> 결론 ) 한글검색도 영문검색도 되지않고 있습니다. ㅠㅠㅠㅠ

도움 부탁드립니다...ㅠㅠ

 

 

 

by 마농 [2021.01.08 16:30:43]
SELECT a.um
     , a.han
     , a.eng
     , a.per_name
     , a.dept
     , b.deptnm
     , c.kornm
  FROM tb_prroduct_manual a
  LEFT JOIN tb_dept b
    ON a.dept = b.dept
 WHERE 1=1
<isNotEmpty property="sh_name" prepend="AND">
   AND INSTR(a.product_han, #sh_name# ) + INSTR(LOWER(a.product_eng), LOWER(#sh_name#)) != 0
</isNotEmpty>
;

 


by 나이많은초보 [2021.01.08 17:10:07]

감사합니다.

기존주어진 조건에서만 해보려에서 벗어나지 못하고 계속헤매고 있었습니다.

<isNotEmpty prepend="" property="">에서 prepend에는 AND /OR  , property에는 파라메터를 사용이라고 하여 보내주신것처럼 생각을 못해봤습니다.

죄송한데 마지막에 != 0 일때까지가 무슨의미인지..이해가 안되어서요...

너무 초보라서...

답변까지 이리주셨는데 질문이 많습니다.

감사합니다.~

 

 


by 마농 [2021.01.08 17:21:35]

프로그램 언어로 쿼리를 돌려보지 마시고
쿼리 툴로 직접 접속해서 쿼리를 돌려 보세요.
프로그래밍 따로 쿼리 따로 배우셔야 합니다.
INSTR(a, b) a 문자열에서 b 문자열의 위치를 찾음
0 이면 b 가 없다는 것이고 있다면 위치가 숫자로 나옴
INSTR(한글) + INSTR(영문) = 0 이면 찾는 문자가 없다는 뜻
INSTR(한글) + INSTR(영문) > 0 이면 찾는 문자가 있다는 뜻
INSTR(한글) + INSTR(영문) != 0 이면 찾는 문자가 있다는 뜻(!= 같지 않다는 뜻)
> 0 대신 != 0 을 사용한 이유는 프로그램 언어에서 > 기호 때문에 에러가 날 수 있기 때문.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입