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
운영게시판
최근게시물
MySQL Q&A 31360 게시물 읽기
No. 31360
필드내 구분자로 들어가 있는 데이터 select 하는 방법 문의
작성자
조현철(kreatist)
작성일
2022-02-27 00:22
조회수
2,689

테이블에 insert 할때 아래와 같이, 하나의 필드에 구분자로 묶어 넣습니다.


INSERT INTO product ( f_div, f_category, f_tag ) VALUES ( 'a', '25|27|32|33|250|335', 'shoes,shirts,jean');


이 데이터에서

f_category에 25나 33이 있는 것을 찾으려면 어떻게 하면 좋을가요?


like 검색으로 하려니, 250 때문에 25가 없어도 검색이 될거 같아서요.

쿼리로 해결할 방법이 없을까요?


 

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

like로 한다면 '25|%' '%|25|% 같은식으로 하면 제일 간단할 것 같습니다.

아니면 사용자함수를 만들어서 쓰셔도 되구요.

정상규(pajama)님이 2022-02-27 10:21에 작성한 댓글입니다.

사용자 함수는 어떻게 만드는 건가요?

조현철(kreatist)님이 2022-02-27 11:43에 작성한 댓글입니다.
1. 앞뒤로 구분자 붙여서 비교하시면 됩니다.
   AND ( CONCAT('|', f_category, '|') LIKE CONCAT('%|', '25', '|%')) OR
         CONCAT('|', f_category, '|') LIKE CONCAT('%|', '33', '|%')) )
2. LIKE 대신 INSTR 이용하면 OR 대신 + 이용 가능합니다.
   AND INSTR(CONCAT('|', f_category, '|'), CONCAT('|', '25', '|'))
     + INSTR(CONCAT('|', f_category, '|'), CONCAT('|', '25', '|')) > 0
3. FIND_IN_SET 함수 사용하면 구분자 안붙이고 가능합니다.
   (다만 구분자 컴마만 인식되므로 별도 가공 필요)
   AND FIND_IN_SET('25', REPLACE(f_category, '|', ','))
     + FIND_IN_SET('33', REPLACE(f_category, '|', ',')) > 0
마농(manon94)님이 2022-02-28 14:42에 작성한 댓글입니다.

감사합니다~

많은 도움 되었습니다.

조현철(kreatist)님이 2022-02-28 17:25에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
31366MYSQL 성능관련 문의
zzzz
2022-04-11
8698
31363두 개의 SELECT 결과를 비교하여 유일한 값을 가져오는 방법 [4]
김현석
2022-04-05
7936
31361특정 필드 기준으로 각 필드의 합을 구하는 방법 [4]
규야
2022-03-24
5876
31360필드내 구분자로 들어가 있는 데이터 select 하는 방법 문의 [4]
조현철
2022-02-27
2689
31359mysql with 버전 오류 문의 드립니다. [2]
정동호
2022-02-07
2364
31358구축한 웹사이트에서 mysql과 php 연동 문제 [2]
김길동
2022-01-28
2582
31357세가지 기준의 기간별 통계 SQL 문의 드립니다. [1]
papa
2021-12-23
3200
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.052초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다