UFO ET IT

MySQL에서 주어진 하위 문자열의 마지막 색인

ufoet 2020. 12. 6. 22:25
반응형

MySQL에서 주어진 하위 문자열의 마지막 색인


INSTR()다음과 같은 함수를 사용하여 MySQL에서 주어진 부분 문자열의 첫 번째 발생 인덱스를 찾을 수 있습니다 .

SELECT instr('Have_a_good_day', '_') AS index_position

5이 경우 밑줄 인 지정된 하위 문자열의 첫 번째 항목을 표시 합니다 _.

lastIndexOf(String str)String 클래스 의 Java 메서드 와 같은 주어진 문자 (또는 하위 문자열)의 마지막 항목을 가져와야 하지만 MySQL에서 내장 함수를 찾을 수 없습니다.

MySQL에서이를 달성하기위한 내장 기능이 있습니까?


@Marc B가 가까웠습니다. MySQL에서 다음 문은 12를 반환합니다.

SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;

값의 사용 가능성을 예상하여 다음 문은 마지막 밑줄 (예 : _) 앞의 문자열의 왼쪽 부분을 추출합니다.

SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));

결과는 "first_middle"입니다. 구분 기호를 포함하려면 다음을 사용하십시오.

SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);

오른쪽에서 검색을 시작하는 옵션을 갖도록 LOCATE를 강화하면 좋을 것입니다.

마지막 공백 뒤에 문자열의 오른쪽 부분을 원하는 경우 더 나은 솔루션은 다음과 같습니다.

SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);

이것은 "last"를 반환합니다.


REVERSE의 오버 헤드를 원하지 않으면 다음을 사용하십시오.

LEFT
(
   'Have_a_good_day', 
   LENGTH('Have_a_good_day') - LENGTH(SUBSTRING_INDEX('Have_a_good_day','_',-1))-1
)

이런 식으로 substring_index를 사용할 수 있다고 생각합니다.

select substring_index(string, delimiter,-1)

-1은 문자열의 끝에서 시작합니다.


나는 이것을 할 수있는 좋은 트릭으로 발견했습니다.

SELECT LOCATE(SUBSTRING_INDEX('Have_a_good_day', '_', -1),'Have_a_good_day')-1 AS indexpos;

마지막으로 발생한 인덱스 (= 12)를 반환합니다. 기본적으로 마지막 구분 기호 뒤에있는 문자열의 오른쪽 부분을 검색 한 다음 전체 문자열에서이 하위 문자열의 위치를 ​​검색하면 위치를 알 수 있습니다. :)

이 왼쪽에 하위 문자열을 얻으려면 다음을 사용할 수 있습니다.

SELECT
  SUBSTRING('Have_a_good_day', 1, 
     LOCATE(SUBSTRING_INDEX('Have_a_good_day', '_', -1),'Have_a_good_day')-1) 
  AS sub;

반전 / 인덱스 조합?

SELECT LENGTH(string) - SUBSTRING_INDEX(REVERSE(string), delimiter) + 1

당신의 주어진 그것을 분해 Have_a_good_day:

REVERSE('Have_a_good_day') -> yad_doog_a_evaH
SUBSTRING_INDEX('yad_doog_a_evah', '_') -> 4
LENGTH('Have_a_good_day') -> 15
15 - 4 + 1 -> 12

Have_a_good_day
123456789012345
           ^

위의 코드는 단일 문자에 대해 성공적으로 작동하지만 하위 문자열의 마지막 발생을 찾는 데 사용하면 실패했습니다. 따라서이 작업을 위해 아래 코드를 권장합니다.

SELECT LENGTH("my father is my father")
        - LOCATE('father', REVERSE("my father is my father"))-(LENGTH('father')-1)

17을 반환해야합니다.

참고 URL : https://stackoverflow.com/questions/12775352/last-index-of-a-given-substring-in-mysql

반응형