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
'UFO ET IT' 카테고리의 다른 글
Unix / Linux에서 특정 파일의 재귀 사본? (0) | 2020.12.06 |
---|---|
UICollectionView 효과적인 드래그 앤 드롭 (0) | 2020.12.06 |
Web.config에서 system.net/mailSettings/smtp를 읽는 방법 (0) | 2020.12.06 |
난수 목록 생성, 합산 1 (0) | 2020.12.06 |
Mockito : 모의 비공개 필드 초기화 (0) | 2020.12.06 |