mysql 중 findin_set()함수 의 사용 및 in()용법 상세 설명
FIND_IN_SET(str,strlist)
str 검색 할 문자열strlist 필드 이름 매개 변 수 는","구분(1,2,6,8,10,22)
검색 필드(strlist)에 포 함 된(str)결 과 를 null 또는 기록 으로 되 돌려 줍 니 다.
문자열 str 가 N 키 체인 으로 구 성 된 문자열 목록 strlist 에 있다 면 값 을 되 돌려 주 는 범 위 는 1 에서 N 사이 입 니 다.하나의 문자열 목록 은'기호 로 분 리 된 하위 체인 으로 구 성 된 문자열 입 니 다.첫 번 째 인자 가 상수 문자열 이 고 두 번 째 인자 가 type SET 열 이 라면 FINDIN_SET()함수 가 최적화 되 어 비트 로 계산 합 니 다.str 가 strlist 나 strlist 가 빈 문자열 이 아니라면 반환 값 은 0 입 니 다.임의의 인자 가 NULL 이면 반환 값 은 NULL 입 니 다.이 함 수 는 첫 번 째 인자 에 쉼표(',')를 포함 할 때 정상적으로 실 행 될 수 없습니다.
개념 을 모 르 더 라 도 괜 찮 습 니 다.다음 유형 에 따라:
예 1:
SELECT FIND_IN_SET('b', 'a,b,c,d');
결과:2b 는 strlist 집합 에서 2 의 위치 에 놓 여 있 기 때문에 1 부터 시작 합 니 다.
select FIND_IN_SET('1', '1');
되 돌아 오 는 것 이 1 입 니 다.이때 의 strlist 집합 은 좀 특수 합 니 다.하나의 문자열 만 있 습 니 다.사실은 앞의 문자열 이 반드시 뒤의 문자열 집합 에서 0 이상 의 수 를 되 돌려 야 합 니 다.
select FIND_IN_SET('2', '1,2'); 2
select FIND_IN_SET('6', '1'); 0 strlist str, 0。
find_in_set()와 in 의 차이 점:테스트 표를 만들어 서 둘 의 차 이 를 설명 하 다.
CREATE TABLE `tb_test` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`list` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');
원래 mysql 에서 이런 조 회 를 진행 할 수 있 을 줄 알 았 는데:
SELECT id,name,list from tb_test WHERE 'daodao' IN(list); -- ( )
실제로 이렇게 하면 안 됩 니 다.이렇게 하면 list 필드 의 값 이'dao'와 같 을 때(IN 앞의 문자열 과 완전히 일치)조회 가 유효 합 니 다.그렇지 않 으 면 결 과 를 얻 을 수 없습니다.'dao'가 정말 list 에 있 더 라 도.
이것 좀 더 보 세 요.
SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- ( )
그 럴 수 있어.
이 두 가 지 는 도대체 어떤 차이 가 있 습 니까?왜 첫 번 째 조 는 정확 한 결 과 를 얻 지 못 하고 두 번 째 조 는 결 과 를 얻 을 수 있 습 니까?그 이 유 는(1)에서(list)list 는 변수 이 고(2)에서(libk','zyfon','daodao')는 상수 이기 때문이다.
그래서 일 을 제대로 하려 면
find_in_set():
SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- ( )
요약:
그래서 list 가 상수 라면 IN 을 직접 사용 할 수 있 습 니 다.그렇지 않 으 면 find 를 사용 해 야 합 니 다.in_set()함수.
즉,이 두 sql 은 조회 효과 가 같 습 니 다.
SELECT * from C_PURCHASINGMASTERDATA where FIND_IN_SET(EKGRP,'C54,C02,C14,C60,C06,C61,C53,C51,C12,C08,C03,C07')
SELECT * from C_PURCHASINGMASTERDATA where EKGRP in ('C54','C02','C14','C60','C06','C61','C53','C51','C12','C08','C03','C07')
그러나 두 번 째 sql 의 값 이 sql 에 들 어 오 는 변수 필드 라면 두 번 째 sql 은 사용 하기 어렵다.실제 상황 으로 in 을 사용 할 지 find 를 사용 할 지 결정 합 니 다.in_set()함수.find_in_set()와 like 의 차이 점:
주요 차이 점 은 like 는 광범 위 한 모호 조회 이 고 findin_set()는 정확하게 일치 하고 필드 값 사 이 를','로 나 눕 니 다.
현재 캐릭터 번호 가 2 인 사용 자 를 조회 하려 면 like 키워드 로 조회 하 십시오.
SELECT userid,username,userrole FROM `user` WHERE userrole LIKE '%2%';
결과:find 로in_set()조회:
SELECT userid,username,userrole FROM `user` WHERE find_in_set('2',userrole)
결과:분명히
find_in_set()
로 조회 한 결과 가 우리 가 원 하 는 결과 이다.그래서 둘 이주요 한 차 이 는 like 가 광범 위 한 모호 조회 이다.그리고
find_in_set()
는 정확하게 일치 하고 필드 값 사이 에','분리,FindIN_SET 조회 결 과 는 like 조회 결과 보다 작 습 니 다.mysql 중 findin_set()와 in()용법 비교
my sql 에 서 는 지정 한 숫자 를 포함 할 수 있 으 며,findin_set()는 특정한 데이터 형식 에 사 용 됩 니 다.
find_in_set 함수 사용 방법
예 를 들 어:
어떤 문장 표 안에 type 필드 가 있 는데 그것 은 문장 유형 을 저장 하고 1 톱기사,2 추천,3 핫 이 슈,4 도문...1,12,13 등 이 있다.
지금 그 는 톱 이자 핫 이 슈 이자 그림 이다.
type 에 1,3,4 형식 으로 저 장 됩 니 다.
그러면 우 리 는 어떻게 sql 로 모든 type 중 4 도문 표준 이 있 는 문장 을 찾 습 니까?
우리 findin_set 가 나 설 때 가 되 었 다.
다음은 인용 내용 입 니 다.
select * from article where FIND_IN_SET('4',type)
MySQL 매 뉴 얼 중 findin_set 함수 의 문법:FIND_IN_SET(str,strlist)
문자열 str 가 N 체인 으로 구 성 된 문자열 목록 strlist 에 있다 면 값 을 되 돌려 주 는 범 위 는 1 에서 N 사이 입 니 다.하나의 문자열 목록 은'기호 로 분 리 된 하위 체인 으로 구 성 된 문자열 입 니 다.첫 번 째 인자 가 상수 문자열 이 고 두 번 째 인자 가 type SET 열 이 라면 FINDIN_SET()함수 가 최적화 되 어 비트 로 계산 합 니 다.
str 가 strlist 나 strlist 가 빈 문자열 이 아니라면 반환 값 은 0 입 니 다.임의의 인자 가 NULL 이면 반환 값 은 NULL 입 니 다.이 함 수 는 첫 번 째 인자 에 쉼표(',')를 포함 할 때 정상적으로 실 행 될 수 없습니다.
mysql> SELECT FIND_IN_SET('b', 'a,b,c,d');
->2 는 b 가 strlist 집합 에서 2 의 위치 에 놓 여 있 기 때문에 1 부터select FIND_IN_SET('1', '1'); 되 돌아 오 는 것 이 1 입 니 다.이때 의 strlist 집합 은 좀 특수 합 니 다.하나의 문자열 만 있 습 니 다.사실은 앞의 문자열 이 다음 문자열 집합 에서 0 이상 의 수 를 되 돌려 야 합 니 다.
select FIND_IN_SET('2', '1,2'); 2
select FIND_IN_SET('6', '1'); 0
주의:
select * from treenodes where FIND_IN_SET(id, '1,2,3,4,5');
find 사용in_set 함수 한 번 에 여러 개의 기록 을 되 돌려 줍 니 다.id 는 표 의 필드 이 고 모든 기록 은 id 가 1,2,3,4,5 일 때 입 니 다.
약간 인(집합)
select * from treenodes where id in (1,2,3,4,5);
테스트 표를 만들어 서 둘 의 차 이 를 설명 하 다.
CREATE TABLE `test` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`list` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `test` VALUES (1, 'name', 'daodao,www.jb51.net,xiaoqin');
INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,www.jb51.net');
MySQL 에서 이런 검색 을 할 수 있 을 줄 알 았 는데:
select id, list, name from table where 'daodao' IN (list);
(1)실제로 이렇게 하면 안 됩 니 다.이렇게 하면 name 이 list 의 첫 번 째 요소 일 때 만 조회 가 유효 합 니 다.그렇지 않 으 면 결 과 를 얻 을 수 없습니다.설령'daodao'가 정말 list 에 있 더 라 도.
이것 좀 더 보 세 요.
select id, list, name from table where 'daodao' IN ('libk', 'zyfon', 'daodao');
(2)그 럴 수 있어.
----------------------------------------------------------------
이 두 가 지 는 도대체 어떤 차이 가 있 습 니까?왜 첫 번 째 조 는 정확 한 결 과 를 얻 지 못 하고 두 번 째 조 는 결 과 를 얻 을 수 있 습 니까?
그 이 유 는(1)에서(list)list 는 변수 이 고(2)에서(libk','zyfon','daodao')는 상수 이기 때문이다.
그래서(1)제대로 일 하려 면 findin_set():
select id, list, name from table where find_in_set('daodao',list);
(1)개선 판.요약:
그래서 list 가 상수 라면 IN 을 직접 사용 할 수 있 습 니 다.그렇지 않 으 면 find 를 사용 해 야 합 니 다.in_set()함수.
위 에서 말 한 것 은 소 편 이 소개 한 my sql 중 find 입 니 다.in_set()함수 의 사용 에 대한 상세 한 설명 은 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.