MySQL에서 공백 앞에있는 모든 문자 가져 오기


81

공백 앞에 필드의 모든 문자를 얻고 싶습니다.

예를 들어, 경우가 field1있다"chara ters"

나는 그것을 돌려주고 싶다 "chara"

이 select 문은 어떻게 생겼습니까?

답변:


115

SELECT LEFT(field1,LOCATE(' ',field1) - 1)

문제의 문자열에 공백이 없으면 빈 문자열이 반환됩니다.


6
후행 공백과 함께 'chara'를 반환합니다. 마지막에 구분자가 필요하지 않으면 LOCATE의 결과를 줄여야합니다. SELECT LEFT (field1, LOCATE ( '', field1)-1)
Enyby

1
메인 필드에 공백이 없으면 작동하지 않습니다. 하위 문자열은 전체 문자열을 반환하는 대신 빈 값을 반환합니다. 예를 들어 내 필드에 "test-possible-incorrect-name"문자열이 포함되어 있으면 "test-possible-incorrect-name"대신 아무 것도 반환하지 않습니다.
Swapnil Gangrade 17

2
@SwapnilGangrade 실제 사용 사례에 따라 예상되는 동작 일 수 있습니다. 문자열에 공백이 없으면 공백 앞에 문자가 없으므로 빈 문자열이 반환되어야한다고 주장 할 수 있습니다. 이러한 경우 다른 사람이 전체 문자열을 반환하기를 원할 수 있습니다. 질문은이 엣지 케이스에서 함수가 어떻게 작동해야하는지 지정하지 않습니다. 답변을 업데이트하여 강조 표시하겠습니다.
Mchl

11
그런 다음 select SUBSTRING_INDEX( field1, ' ', 1 ) from table;공백이 없으면 완전한 문자열을 원할 경우 선택합니다.
Swapnil Gangrade

2
아래의 대답 ( SUBSTRING_INDEX)은 빈 값을 생성하는 대신 구분 기호를 포함하지 않는 값을 유지하기 때문에 일반적인 솔루션으로 "더 나은"것입니다.
퇴화

88

다음은 작동하는 또 다른 방법이며 일부에게는 조금 더 간단 해 보일 수 있습니다. SUBSTRING_INDEX MySQL 함수를 사용합니다 . 1은 첫 번째 공백 이전의 모든 것을 반환하고 -1은 마지막 공백 이후의 모든 것을 반환합니다.

이것은 'chara'를 반환합니다.

SELECT SUBSTRING_INDEX( field1, ' ', 1 )

이것은 'ters'를 반환합니다.

SELECT SUBSTRING_INDEX( field1, ' ', -1 )

세부

양수 값은 문자열 시작 부분에서 지정된 문자를 찾고 음수 값은 문자열 끝 부분에서 시작합니다. 숫자 값은 문자열의 나머지 부분을 반환하기 전에 찾을 지정된 문자의 수량을 나타냅니다. 검색중인 문자가 없으면 전체 필드 값이 반환됩니다.

이 경우 -2는이 예제에 존재하지 않는 두 번째에서 마지막 공간의 오른쪽에있는 모든 것을 반환하므로 전체 필드 값이 반환됩니다.


3
공백없이 문자열이있는 경우에도 작동합니다. 예를 들어 'chara'도 작동합니다.
bernhardh

2
이것은 xyz 구성 요소가있는 버전 문자열의 주 버전과 부 버전을 가져 오는 데 매우 효과적이었습니다.
thomthom

4
문자를 찾을 수없는 경우 전체 필드를 반환하려는 경우에 가장 잘 작동합니다.
stephentgrammer

이를 사용하여 구분 기호 (쉼표)가 존재하는 문자열 필드에서 지리 좌표를 추출합니다.
ob-ivan

11

이를 위해서는 문자열 연산 이 필요 합니다. 모든 필드에 하나 이상의 공백 문자가 있다고 가정합니다.

SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;

안전한 접근 :

SELECT IF(
    LOCATE(' ', field1),
    SUBSTR(field1, 0, LOCATE(' ', field1)),
    field1
) FROM your_table;

필드에 공백이 포함되지 않은 경우 어떤 결과가 반환되어야하는지 확실하지 않지만 안전한 버전의 경우 +1입니다.
Mchl 2010-08-12

2
1 변화 0으로했다 :SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;
루이스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.