2010-04-02 8 views
2

제발, 제 질문에 대답 해주십시오. SQL을 사용하여 문자열 끝에서 숫자를 제거하는 방법은 무엇입니까? 예를 들어 '2Ga4la2009'문자열은 2Ga4la로 변환되어야합니다. 문제는 문자열 끝에 얼마나 많은 자릿수가 있는지 모르기 때문입니다. 안부 인사, 갈리나.SQL을 사용하여 문자열의 끝에서 숫자를 제거하는 방법

+0

숫자 앞에있는 문자열은 길이가 될 수 있습니까? – Steve

+0

예, 숫자 앞에있는 문자열은 임의의 lenth가 될 수 있습니다. – user307880

+0

작동하는 답변을 찾으면 "동의"하여 저자가 크레딧을 얻게하십시오. – h0tw1r3

답변

0

이것 좀보세요 : 당신이 어떤 이유로 UDF를 사용할 수 있으며, DB를 클라이언트 측에서 그것을하지 않으려면 다음을 항상 할 수 http://www.mysqludf.org/lib_mysqludf_preg/

을 그리고 :

  1. 끝에서 첫 번째 문자의 위치

  2. 마 LEFT (25 개 문자열의 반대에 찾아 예 : 최소) (@string, @string_length - result_of_step_1 @) 찾기

당신 때문에이 경우 문자열의 끝에있는 숫자는 반환이 찾을 수없는 경우에는 특별한 처리를 할 필요가 없습니다 0

건배

+0

처음에는 그렇게 생각했지만 나중에는 정규 표현식을 사용하거나 사용할 수있는 표준 함수가 있다고 생각하기 시작했습니다. MySQL에서 regulare 표현이 도움이되지 않는 것처럼 보입니다. – user307880

+0

예, Regexp replace는 불행히도 MySQL의 일부가 아닙니다. 그러나 일반적으로 db 클라이언트 (예 : 응용 프로그램)에서 수행하는 것이 좋습니다. – glebm

+0

가끔은 서버에서 유용 할 수 있습니다. 예를 들어, 테이블의 모든 행에 대해 앞서 언급 한 작업을 수행해야합니다. – user307880

2

이 작동하는 것 같다 :

select left(concat('2Ga4la2009','1'), length(concat('2Ga4la2009','1')) - length(convert(convert(reverse(concat('2Ga4la2009','1')),unsigned),char))) 

concat ('myvalue', '1')은 0으로 끝나는 숫자를 보호합니다.

숫자가 앞쪽에 오도록 역방향으로 뒤집습니다.

내부 변환은 뒤의 문자열을 숫자로 변경하여 후행 문자를 삭제합니다.

외부 변환은 숫자 부분을 문자로 다시 바꿈으로써 길이를 가져올 수 있습니다.

숫자 부분의 길이를 알았으므로 "left()"기능을 사용하여 잘라낼 원래 값의 문자 수를 결정할 수 있습니다.

추악하지만 작동합니다. :-)

+1

도 내 버전보다 빠르지 만, 확실하지는 않지만 – glebm

+0

나는 그것을 검사 할 것이다. – user307880

+0

매우 흥미로운 것 같습니다. 나는 그것을 시험 할 것이다. – user307880

관련 문제