...
그것이 ' '
문자가 포함되어 있는지 확인하기 위해 초기 값 및 테스트를 가져 가라. 그렇다면 우리는 해당 ' '
문자의 색인을 분리하기 시작합니다. 없다면 초기 값을 반환합니다. 추가 가능성이 각각 ' '
인 구분 된 문자열에 대해 재귀를 시작하십시오. 이것은 2 ' '
으로 구분 된 단어 다음에 숫자 값이 올 수 있도록 구성되거나 경우에 따라 허용되지 않습니다. 여기
SQL 바이올린 : http://sqlfiddle.com/#!2/70168/7
검색어 :
SELECT
sampleInfo,
IF (LOCATE(' ', sampleInfo) > 0,
SUBSTRING(sampleInfo, 1, LOCATE(' ', sampleInfo) - 1),
sampleInfo) AS firstPart,
IF (LOCATE(' ', sampleInfo) > 0,
IF (LOCATE(' ', SUBSTRING(sampleInfo, LOCATE(' ', sampleInfo) + 1)) > 0,
SUBSTRING(
SUBSTRING(sampleInfo, LOCATE(' ', sampleInfo) + 1),
1,
LOCATE(' ', SUBSTRING(sampleInfo, LOCATE(' ', sampleInfo) + 1)) - 1),
SUBSTRING(sampleInfo, LOCATE(' ', sampleInfo) + 1)),
0) AS secondPart,
IF (LOCATE(' ', sampleInfo) > 0,
IF (LOCATE(' ', SUBSTRING(sampleInfo, LOCATE(' ', sampleInfo) + 1)) > 0,
SUBSTRING(
SUBSTRING(sampleInfo, LOCATE(' ', sampleInfo) + 1),
LOCATE(' ', SUBSTRING(sampleInfo, LOCATE(' ', sampleInfo) + 1)) + 1),
0),
0) AS thirdPart
FROM test
ORDER BY
firstPart,
thirdPart,
CONVERT(secondPart, SIGNED) --if conversion fails the value is 0
결과 :
╔═══════════════╦═══════════╦════════════╦═══════════╗
║ SAMPLEINFO ║ FIRSTPART ║ SECONDPART ║ THIRDPART ║
╠═══════════════╬═══════════╬════════════╬═══════════╣
║ asdf 1 ║ asdf ║ 1 ║ 0 ║
║ asdf 2 ║ asdf ║ 2 ║ 0 ║
║ sample ║ sample ║ 0 ║ 0 ║
║ sample 1 ║ sample ║ 1 ║ 0 ║
║ sample 2 ║ sample ║ 2 ║ 0 ║
║ sample 11 ║ sample ║ 11 ║ 0 ║
║ sample 20 ║ sample ║ 20 ║ 0 ║
║ sample 100 ║ sample ║ 100 ║ 0 ║
║ sample 101 ║ sample ║ 101 ║ 0 ║
║ sample test 1 ║ sample ║ test ║ 1 ║
║ sample test 2 ║ sample ║ test ║ 2 ║
╚═══════════════╩═══════════╩════════════╩═══════════╝
면책 조항 :이 솔루션은 매우 성능이 좋은 또는 확장하지 않습니다. 몇 가지 예를 들어 이라는 언어를 사용하여 PHP
또는 C#
과 같은 다른 언어로 작업하면 훨씬 더 효과적입니다. 이것은 또한 귀하가 귀하의 의견에 언급 한 내용에 근거하여 귀하의 데이터에 대한 몇 가지 가정을합니다.
데이터에 숫자가 들어 있으면 항상 공백으로 구분 되나요? 또한 데이터가'sample 123 moretext'와 같을 수 있습니까? –
예, 항상 분리되어 있지만 숫자 앞에 한 단어 이상이있을 수 있습니다. 나는 여전히 "샘플 123 moretext"와 같은 데이터를 찾지 못했습니다. – Aleks
번호가없는 접두어를 처음이나 마지막으로 사용 하시겠습니까? –