Oracle 문자열 에 숫자,특수 기호 가 포 함 된 정렬 문 제 를 해결 합 니 다.

질문 설명:
한 동 네 는 동네,건물,유닛 번호,방 번호 에 따라 정렬 해 야 하지만 주소 설명 에 따라 정렬 할 때 문자열 에 숫자 가 포함 되 어 있 기 때문에 다음 과 같은 결 과 를 얻 었 습 니 다.
1 번 건물 뒤 에는 2 번 건물 이 어야 하 는데 조회 결 과 는 10 번 건물 이 었 다.

해결 을 시도 하 다
정규 표현 식 으로 바 꾸 기

결과:
건물 번호 정렬 은 정상 이 었 지만 방 번호 정렬 이 혼 란 스 러 웠 다.  계속 방법 을 생각 하 다
최종 방법:
translate 함수 사용

결과 가 정상적으로 나 타 났 음 을 발견 할 수 있다.
다음은 translate 사용 방법 을 동봉 합 니 다.
1.문법:TRANSLATE(string,from_str,to_str) 목적
반환 장(모든 출현)fromstr 의 모든 문 자 를 to 로 대체 합 니 다.str 의 해당 문자 이후 string.TRANSLATE 는 REPLACE 가 제공 하 는 기능 의 초 집합 이다.하면,만약,만약...str 비 tostr 길이,그럼 fromstr 에 없 음 tostr 의 추가 문 자 는 string 에서 삭 제 됩 니 다.교체 문자 가 없 기 때 문 입 니 다.to_str 가 비어 있 으 면 안 됩 니 다.Oracle 은 빈 문자열 을 NULL 로 해석 하고 TRANSLATE 의 모든 인자 가 NULL 이면 결과 도 NULL 입 니 다.
3.사용 가능 한 위치
프로 세 스 구문 과 SQL 구문.
예시
Sql 코드

SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; 
 TRANSLATE ( 
 -------------- 
 123456ghij 
 SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; 
 TRANSL 
 ---------- 
 123456 
문법:TR ANSLATE(expr,from,to)expr:한 줄 의 문 자 를 대표 합 니 다.from 과 to 는 왼쪽 에서 오른쪽으로 일일이 대응 하 는 관계 입 니 다.대응 하지 못 하면 빈 값 으로 간주 합 니 다.
예:

select translate('abcbbaadef','ba','#@') from dual (b  #  ,a  @  )
select translate('abcbbaadef','bad','#@') from dual (b  #  ,a  @  ,d       ,    )
따라서 결 과 는@\#c\##@def 와@\#c\#\#@ef 순 으로 나 타 났 다.
문법:TRANSLATE(expr,from,to)expr:한 줄 의 문 자 를 대표 합 니 다.from 과 to 는 왼쪽 에서 오른쪽으로 일일이 대응 하 는 관계 입 니 다.대응 하지 못 하면 빈 값 으로 간주 합 니 다.
예:

select translate('abcbbaadef','ba','#@') from dual (b  #  ,a  @  )
select translate('abcbbaadef','bad','#@') from dual (b  #  ,a  @  ,d       ,    )
따라서 결 과 는@\#c\##@def 와@\#c\#\#@ef 순 으로 나 타 났 다.
예 는 다음 과 같다.
 예제 1:숫자 를 9 로 바 꾸 고 다른 대문자 들 은 X 로 바 꾼 다음 되 돌려 줍 니 다.

SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX')                       "License"FROM DUAL
예시 2:숫자 를 보존 하고 다른 대문자 자 모 를 제거 합 니 다.

SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789') "Translate example"FROM DUAL
나 용 보충 예 는 다음 과 같다.
예시 3:예시 증명 은 문자 에 따라 처리 하 는 것 이지 바이트 에 따라 처리 하 는 것 이 아니 라 tostring 의 문자 수 는 fromstring 이 많 으 면 더 많은 문자 수 는 쓸모 가 없 는 것 같 고 이상 을 일 으 키 지 않 습 니 다.

SELECT TRANSLATE('     ,    ', '  ', 'China') "Translate example"
FROM DUAL
예시 4:아래 의 예시 증명,만약 fromstring 의 문자 수 는 to 보다 크다string,그렇게 많은 문 자 는 삭 제 됩 니 다.즉,ina 세 문 자 는 char 매개 변수 에서 삭 제 됩 니 다.당연히 대소 문 자 를 구분 합 니 다.

SELECT TRANSLATE('I am Chinese, I love China', 'China', '  ') "Translate example"
FROM DUAL
예제 5:다음 예제 에 따 르 면 두 번 째 매개 변수 가 빈 문자열 이면 전체 null 로 돌아 갑 니 다.

SELECT TRANSLATE('2KRW229',
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'') "License"
FROM DUAL
예 6:은행 이 체 를 할 때 계좌 인 이 이름 의 마지막 글자 만 표시 하고 나머지 는 별표 로 대체 하 는 것 을 자주 볼 수 있 습 니 다.저 는 translate 로 비슷 한 물건 을 만 들 겠 습 니 다.

SELECT TRANSLATE('   ',
substr('   ',1,length('   ') - 1),
rpad('*',length('   '),'*')) "License"
  FROM DUAL
총결산
위 에서 말 한 것 은 오 라 클 문자열 에 숫자,특수 기호 가 포 함 된 정렬 문 제 를 해결 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기