mysql 중 findin_set()함수 의 사용 및 in()용법 상세 설명

7553 단어 mysqlfindinset()
MySQL 매 뉴 얼 중 findin_set 함수 의 문법 설명: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');
결과: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 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()함수 의 사용 에 대한 상세 한 설명 은 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기