[SQL] 쉼표에서 MySQL의 쿼리 찾는 값은 문자열을 분리
SQL쉼표에서 MySQL의 쿼리 찾는 값은 문자열을 분리
나는 쉼표로 구분 된 문자열과 같은 1,2,5,12,15이 포함 된 내 테이블 셔츠 필드 COLORS (VARCHAR (50))이 ,. 사용 가능한 색상을 나타내는 각각의 번호입니다.
'% 1 %'와 같은 색상이 모두 빨간색 셔츠를 얻을 셔츠에서 쿼리를 선택합니다 * (색상 = 1)을 실행할 때, 나는 또한 색상이 회색 셔츠 (= 12), 오렌지 (= 15)을 얻는다.
그 선택 만 컬러 (1)이 아닌 숫자 1을 포함하는 모든 색상 그래서 어떻게 쿼리를 다시 작성해야합니까?
해결법
-
==============================
1.고전적인 방법은 왼쪽과 오른쪽에 쉼표를 추가하는 것입니다 :
고전적인 방법은 왼쪽과 오른쪽에 쉼표를 추가하는 것입니다 :
select * from shirts where CONCAT(',', colors, ',') like '%,1,%'
그러나 FIND_IN_SET도 작동합니다 :
select * from shirts where find_in_set('1',colors) <> 0
-
==============================
2.FIND_IN_SET이 경우에 당신의 친구입니다
FIND_IN_SET이 경우에 당신의 친구입니다
select * from shirts where FIND_IN_SET(1,colors)
-
==============================
3.MySQL을위한 FIND_IN_SET 기능을 살펴보십시오.
MySQL을위한 FIND_IN_SET 기능을 살펴보십시오.
SELECT * FROM shirts WHERE FIND_IN_SET('1',colors) > 0
-
==============================
4.이것은 확실히 작동합니다, 나는 실제로 그것을 밖으로 시도 :
이것은 확실히 작동합니다, 나는 실제로 그것을 밖으로 시도 :
lwdba@localhost (DB test) :: DROP TABLE IF EXISTS shirts; Query OK, 0 rows affected (0.08 sec) lwdba@localhost (DB test) :: CREATE TABLE shirts -> (<BR> -> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -> ticketnumber INT, -> colors VARCHAR(30) -> );<BR> Query OK, 0 rows affected (0.19 sec) lwdba@localhost (DB test) :: INSERT INTO shirts (ticketnumber,colors) VALUES -> (32423,'1,2,5,12,15'), -> (32424,'1,5,12,15,30'), -> (32425,'2,5,11,15,28'), -> (32426,'1,2,7,12,15'), -> (32427,'2,4,8,12,15'); Query OK, 5 rows affected (0.06 sec) Records: 5 Duplicates: 0 Warnings: 0 lwdba@localhost (DB test) :: SELECT * FROM shirts WHERE LOCATE(CONCAT(',', 1 ,','),CONCAT(',',colors,',')) > 0; +----+--------------+--------------+ | id | ticketnumber | colors | +----+--------------+--------------+ | 1 | 32423 | 1,2,5,12,15 | | 2 | 32424 | 1,5,12,15,30 | | 4 | 32426 | 1,2,7,12,15 | +----+--------------+--------------+ 3 rows in set (0.00 sec)
시도 해봐 !!!
-
==============================
5.색상 세트가 어느 정도 고정되어있는 경우, 가장 효율적이고 대부분의 읽을 수있는 방법은 쿼리 ( '붉은'색) 앱에서 문자열 상수를 사용하고 FIND_IN_SET와 MySQL을의 SET 유형을 사용하는 것입니다. FIND_IN_SET와 SET 타입을 사용할 때, MySQL은 모든 값을 저장하기 위해 하나 개의 정수를 사용하고, 콤마로 구분 된 문자열을 스캔하는 방법보다 더 효율적이다 값의 존재를 확인하기 위해 진 "및"동작을 사용한다.
색상 세트가 어느 정도 고정되어있는 경우, 가장 효율적이고 대부분의 읽을 수있는 방법은 쿼리 ( '붉은'색) 앱에서 문자열 상수를 사용하고 FIND_IN_SET와 MySQL을의 SET 유형을 사용하는 것입니다. FIND_IN_SET와 SET 타입을 사용할 때, MySQL은 모든 값을 저장하기 위해 하나 개의 정수를 사용하고, 콤마로 구분 된 문자열을 스캔하는 방법보다 더 효율적이다 값의 존재를 확인하기 위해 진 "및"동작을 사용한다.
SET에서 '빨간색'( '빨간색', '블루', '녹색')는 내부적으로 1로, '블루'2로 내부에 저장 될 것이고, '녹색'4 값 '빨간색으로 내부에 저장됩니다 저장됩니다 (| 4 일) 5로 '녹색, 빨간색 |, 파란색은'(2 일)와 3로 저장 될 것이다 '.
-
==============================
6.당신이 MySQL을 사용하는 경우, 당신이 사용할 수있는 방법은 정규 표현식이있다 ...
당신이 MySQL을 사용하는 경우, 당신이 사용할 수있는 방법은 정규 표현식이있다 ...
http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
그럼 당신은 사용합니다 :
SELECT * FROM `shirts` WHERE `colors` REGEXP '\b1\b'
-
==============================
7.당신은 실제로 당신이 세 개의 테이블이 그래서 데이터베이스 스키마를 수정해야합니다 :
당신은 실제로 당신이 세 개의 테이블이 그래서 데이터베이스 스키마를 수정해야합니다 :
shirt: shirt_id, shirt_name color: color_id, color_name shirtcolor: shirt_id, color_id
당신은 빨간색 셔츠를 모두 찾으려면 다음, 당신은 같은 쿼리를 할 거라고 :
SELECT * FROM shirt, color WHERE color.color_name = 'red' AND shirt.shirt_id = shirtcolor.shirt_id AND color.color_id = shirtcolor.color_id
-
==============================
8.
select * from shirts where find_in_set('1',colors) <> 0
나를위한 작품
-
==============================
9.당신은 기능에 따라이 작업을 수행 할 수 있습니다.
당신은 기능에 따라이 작업을 수행 할 수 있습니다.
함수를 만드는 쿼리를 다음 실행합니다.
DELIMITER || CREATE FUNCTION `TOTAL_OCCURANCE`(`commastring` TEXT, `findme` VARCHAR(255)) RETURNS int(11) NO SQL -- SANI: First param is for comma separated string and 2nd for string to find. return ROUND ( ( LENGTH(commastring) - LENGTH( REPLACE ( commastring, findme, "") ) ) / LENGTH(findme) );
그리고이 같은이 함수를 호출
msyql> select TOTAL_OCCURANCE('A,B,C,A,D,X,B,AB', 'A');
그것은 도움이 줄 바랍니다.
-
==============================
10.MySQL의 1. :
MySQL의 1. :
SELECT FIND_IN_SET(5, columnname) AS result FROM table
2.For PostgreSQL을 :
SELECT * FROM TABLENAME f WHERE 'searchvalue' = ANY (string_to_array(COLUMNNAME, ','))
예
select * from customer f where '11' = ANY (string_to_array(customerids, ','))
-
==============================
11.모든 답변은 정말 정확하지 않습니다,이 시도 :
모든 답변은 정말 정확하지 않습니다,이 시도 :
select * from shirts where 1 IN (colors);
from https://stackoverflow.com/questions/5033047/mysql-query-finding-values-in-a-comma-separated-string by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 실행중인 총을 계산 (0) | 2020.03.08 |
---|---|
[SQL] 두 날짜 사이의 날짜의 목록을 가져옵니다 (0) | 2020.03.08 |
[SQL] 어떻게 하나의 컬럼 식별자 필드에 서브 쿼리에서 "가입"여러 행에 SQL 서버 기능을 만드는 방법? [복제] (0) | 2020.03.08 |
[SQL] 오라클 SQL 동적 피벗 (0) | 2020.03.08 |
[SQL] 왜 오라클은 NULL로 빈 문자열을 취급 9I는 무엇입니까? (0) | 2020.03.08 |