[SQL] MySQL의 문자열과 함께 작업에) (폭발의 등가
SQLMySQL의 문자열과 함께 작업에) (폭발의 등가
MySQL을, 나는 '31를 검색 할 수 있도록하려면 - 7 ', 때 다른 값 ='7-31 '을. 내가 MySQL의에서 문자열을 따로 휴식 할 때 사용하는 구문은 무엇입니까? (- $ 문자열 '')와 함께 넣어 PHP, 나는 아마 폭발 사용할 수 있습니다. MySQL의에서이 작업을 수행 할 수있는 방법이 있나요?
배경 : 나는 스포츠 점수와 협력 점수가 동일한 (와 같은 날짜에)있는 게임을 시도하려는거야 - 뒤로 그들의 상대의 데이터베이스 레코드에 비해 각 팀 나열된 점수를.
이상적인 MySQL의 호출은 다음과 같습니다
Where opponent1.date = opponent2.date
AND opponent1.score = opponent2.score
(상대 2.score는 상대 1.score의 뒤쪽으로 할 필요가있을 것이다).
해결법
-
==============================
1.MYSQL에는 () 내장 함수처럼 폭발하지 않았다. 그러나 당신은 쉽게 DB에 유사한 기능을 추가 한 다음 PHP 쿼리에서 사용할 수 있습니다. 그 기능은 다음과 같이 표시됩니다
MYSQL에는 () 내장 함수처럼 폭발하지 않았다. 그러나 당신은 쉽게 DB에 유사한 기능을 추가 한 다음 PHP 쿼리에서 사용할 수 있습니다. 그 기능은 다음과 같이 표시됩니다
CREATE FUNCTION SPLIT_STRING(str VARCHAR(255), delim VARCHAR(12), pos INT) RETURNS VARCHAR(255) RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos), LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1), delim, '');
용법:
SELECT SPLIT_STRING('apple, pear, melon', ',', 1)
위의 예는 사과를 반환합니다. 나는 당신이 POS에서 명시 적으로 반환 할 발생 지정해야하므로 MySQL의에서 배열을 반환하는 것은 불가능 될 것이라고 생각합니다. 당신이 그것을 사용하여 성공하면 알려주세요.
-
==============================
2.내가 SUBSTRING_INDEX와 시도 (문자열, 구분자, 카운트)
내가 SUBSTRING_INDEX와 시도 (문자열, 구분자, 카운트)
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -> 'www.mysql' mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -> 'mysql.com'
mysql.com에 대한 자세한 참조 http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_substring-index
-
==============================
3.이 방법으로 저장 프로 시저를 사용할 수 있습니다 ..
이 방법으로 저장 프로 시저를 사용할 수 있습니다 ..
DELIMITER | CREATE PROCEDURE explode( pDelim VARCHAR(32), pStr TEXT) BEGIN DROP TABLE IF EXISTS temp_explode; CREATE TEMPORARY TABLE temp_explode (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, word VARCHAR(40)); SET @sql := CONCAT('INSERT INTO temp_explode (word) VALUES (', REPLACE(QUOTE(pStr), pDelim, '\'), (\''), ')'); PREPARE myStmt FROM @sql; EXECUTE myStmt; END | DELIMITER ;
-
==============================
4.우선 당신은 데이터베이스 구조를 변경해야합니다 -이 경우 점수가 예를 들어, 복합 값의 일종이며, 두 개의 컬럼에 저장해야합니다. score_host, score_guest.
우선 당신은 데이터베이스 구조를 변경해야합니다 -이 경우 점수가 예를 들어, 복합 값의 일종이며, 두 개의 컬럼에 저장해야합니다. score_host, score_guest.
MySQL은 당신이 SUBSTRING ()를 사용하여 호스트와 게스트의 점수를 잘라 ()를 찾습니다 수 있습니다이 경우 그러나 해당) (폭발 제공하지 않습니다.
SELECT CONVERT(SUBSTRING(score, 1, LOCATE('-',score) - 2) USING INTEGER) as score_host, CONVERT(SUBSTRING(score, LOCATE('-',score)+2) USING INTEGER) as score_guest FROM ...;
CONVERT ()는 숫자 23에 문자열 "23"를 캐스팅하는 데 사용됩니다.
-
==============================
5.이 기능을 사용합니다. 그것은 마법처럼 작동합니다. 교체 "|" 등등 폭발 숯 / 분할 및 1,2,3- 값으로 데이터 세트의 엔트리 수에 기초 : Value_ONE | Value_TWO | Value_THREE.
이 기능을 사용합니다. 그것은 마법처럼 작동합니다. 교체 "|" 등등 폭발 숯 / 분할 및 1,2,3- 값으로 데이터 세트의 엔트리 수에 기초 : Value_ONE | Value_TWO | Value_THREE.
SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 1), '|', -1) AS PSI, SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 2), '|', -1) AS GPM, SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 3), '|', -1) AS LIQUID
이게 도움이 되길 바란다.
-
==============================
6.@ 아르 멘-p는 지적 MYSQL이 더 폭발했다 (). 그러나, 나는 훨씬 더는 필요 이상 복잡에 제시된 해결책을 생각합니다. 당신이 (예를 들어, 테이블 키의 목록을 확인합니다) 당신이 쉼표로 구분 된 목록의 문자열을 제공하는 경우 빠른 검사를 수행합니다 :
@ 아르 멘-p는 지적 MYSQL이 더 폭발했다 (). 그러나, 나는 훨씬 더는 필요 이상 복잡에 제시된 해결책을 생각합니다. 당신이 (예를 들어, 테이블 키의 목록을 확인합니다) 당신이 쉼표로 구분 된 목록의 문자열을 제공하는 경우 빠른 검사를 수행합니다 :
SELECT table_key, field_1, field_2, field_3 FROM my_table WHERE field_3 = 'my_field_3_value' AND (comma_list = table_key OR comma_list LIKE CONCAT(table_key, ',%') OR comma_list LIKE CONCAT('%,', table_key, ',%') OR comma_list LIKE CONCAT('%,', table_key))
이것은 당신이 또한 너무 테이블에 field_3 확인할 필요가 있다고 가정합니다. 당신이 그것을 필요로하지 않는 경우, 그 조건을 추가하지 않습니다.
-
==============================
7.그림과 같이 사용 SUBSTRING_INDEX 내가 열 score1 및 score2있는 테이블을 작성한 아래 예에서 score1 3-7, 7-3 score2 등이있다. "-"쿼리 아래 사용하여 분할 할 수 있고 score2의 순서를 반대로하고 score1 비교
그림과 같이 사용 SUBSTRING_INDEX 내가 열 score1 및 score2있는 테이블을 작성한 아래 예에서 score1 3-7, 7-3 score2 등이있다. "-"쿼리 아래 사용하여 분할 할 수 있고 score2의 순서를 반대로하고 score1 비교
SELECT CONCAT( SUBSTRING_INDEX(score1, '-', 1), SUBSTRING_INDEX(score1,'-',-1) ) AS my_score1, CONCAT( SUBSTRING_INDEX(score2, '-', -1), SUBSTRING_INDEX(score2, '-', 1) ) AS my_score2 FROM test HAVING my_score1=my_score2
-
==============================
8.새로운 캐릭터를 구축하는 foreach는 함께 사용되어 폭발 할 경우는 사용하여 폭발 시뮬레이션 할 수 있습니다 동안이 같은 루프 :
새로운 캐릭터를 구축하는 foreach는 함께 사용되어 폭발 할 경우는 사용하여 폭발 시뮬레이션 할 수 있습니다 동안이 같은 루프 :
CREATE FUNCTION explode_and_loop(sep VARCHAR(),inputstring VARCHAR()) RETURNS VARCHAR() BEGIN DECLARE part,returnstring VARCHAR(); DECLARE cnt,partsCnt INT(); SET returnstring = ''; SET partsCnt = ((LENGTH(inputstring ) - LENGTH(REPLACE(inputstring,sep,''))) DIV LENGTH(sep); SET cnt = 0; WHILE cnt <= partsCnt DO SET cnt = cnt + 1; SET part = SUBSTRING_INDEX(SUBSTRING_INDEX(inputstring ,sep,cnt),sep,-1); -- DO SOMETHING with the part eg make html: SET returnstring = CONCAT(returnstring,'<li>',part,'</li>') END WHILE; RETURN returnstring; END
이 예는 부품의 HTML 목록을 반환합니다. (필요한 변수 legths 첨가되어야 할)
-
==============================
9.내 경우에, 제발 메모를 오늘 같은 문제에 직면하고 아래와 같이 해결, 나는 그러므로 내가 그들에게이 방법을 복구 할 수 있으며, 연결된 문자열의 항목 수를 알고 :
내 경우에, 제발 메모를 오늘 같은 문제에 직면하고 아래와 같이 해결, 나는 그러므로 내가 그들에게이 방법을 복구 할 수 있으며, 연결된 문자열의 항목 수를 알고 :
set @var1=0; set @var2=0; SELECT SUBSTRING_INDEX('value1,value2', ',', 1) into @var1; SELECT SUBSTRING_INDEX('value1,value2', ',', -1) into @var2;
VAR1 @ 및 VAR2 @ 변수가 폭발 할 유사한 값을 가질 것이다 ().
-
==============================
10.이것은 실제로 유니 코드 문자를 지원하기 위해 선택한 답변의 수정 된 버전입니다하지만 난이 의견을 충분히 평판이 없습니다.
이것은 실제로 유니 코드 문자를 지원하기 위해 선택한 답변의 수정 된 버전입니다하지만 난이 의견을 충분히 평판이 없습니다.
CREATE FUNCTION SPLIT_STRING(str VARCHAR(255) CHARSET utf8, delim VARCHAR(12), pos INT) RETURNS varchar(255) CHARSET utf8 RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos), CHAR_LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1), delim, '')
수정 사항은 다음과 같습니다 :
-
==============================
11.나는 확실히이 완전히 질문을 (그렇지 않은) 응답되어 있지 않다 경우,하지만 내가 매우 비슷한 문제에 대한 해낸 솔루션입니다. 나는 다른 솔루션의 일부는 짧은 보면 알 수 있지만 필요 이상으로 SUBSTRING_INDEX () 방법을 사용하는 것 같다. 여기가 구분 당 한 번만) (LOCATE 단지 사용하려고합니다.
나는 확실히이 완전히 질문을 (그렇지 않은) 응답되어 있지 않다 경우,하지만 내가 매우 비슷한 문제에 대한 해낸 솔루션입니다. 나는 다른 솔루션의 일부는 짧은 보면 알 수 있지만 필요 이상으로 SUBSTRING_INDEX () 방법을 사용하는 것 같다. 여기가 구분 당 한 번만) (LOCATE 단지 사용하려고합니다.
-- ***************************************************************************** -- test_PVreplace DROP FUNCTION IF EXISTS test_PVreplace; delimiter // CREATE FUNCTION test_PVreplace ( str TEXT, -- String to do search'n'replace on pv TEXT -- Parameter/value pairs 'p1=v1|p2=v2|p3=v3' ) RETURNS TEXT -- Replace specific tags with specific values. sproc:BEGIN DECLARE idx INT; DECLARE idx0 INT DEFAULT 1; -- 1-origined, not 0-origined DECLARE len INT; DECLARE sPV TEXT; DECLARE iPV INT; DECLARE sP TEXT; DECLARE sV TEXT; -- P/V string *must* end with a delimiter. IF (RIGHT (pv, 1) <> '|') THEN SET pv = CONCAT (pv, '|'); END IF; -- Find all the P/V pairs. SELECT LOCATE ('|', pv, idx0) INTO idx; WHILE (idx > 0) DO SET len = idx - idx0; SELECT SUBSTRING(pv, idx0, len) INTO sPV; -- Found a P/V pair. Break it up. SELECT LOCATE ('=', sPV) INTO iPV; IF (iPV = 0) THEN SET sP = sPV; SET sV = ''; ELSE SELECT SUBSTRING(sPV, 1, iPV-1) INTO sP; SELECT SUBSTRING(sPV, iPV+1) INTO sV; END IF; -- Do the substitution(s). SELECT REPLACE (str, sP, sV) INTO str; -- Do next P/V pair. SET idx0 = idx + 1; SELECT LOCATE ('|', pv, idx0) INTO idx; END WHILE; RETURN (str); END// delimiter ; SELECT test_PVreplace ('%one% %two% %three%', '%one%=1|%two%=2|%three%=3'); SELECT test_PVreplace ('%one% %two% %three%', '%one%=I|%two%=II|%three%=III'); SELECT test_PVreplace ('%one% %two% %three% - %one% %two% %three%', '%one%=I|%two%=II|%three%=III'); SELECT test_PVreplace ('%one% %two% %three% - %one% %two% %three%', ''); SELECT test_PVreplace ('%one% %two% %three% - %one% %two% %three%', NULL); SELECT test_PVreplace ('%one% %two% %three%', '%one%=%two%|%two%=%three%|%three%=III');
from https://stackoverflow.com/questions/5928599/equivalent-of-explode-to-work-with-strings-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 두 개의 서로 다른 데이터베이스에 테이블을 사이에 가입? (0) | 2020.03.16 |
---|---|
[SQL] MySQL은 시뮬레이션 지연 기능 (0) | 2020.03.16 |
[SQL] 사용하여 하위 쿼리 * 1를 존재하거나 존재 (0) | 2020.03.16 |
[SQL] WHERE 절에 알 수없는 열 (0) | 2020.03.16 |
[SQL] 같은 select 문에 의해 수와 그룹을 사용하는 방법 (0) | 2020.03.16 |