>  기사  >  데이터 베이스  >  숫자와 특수 기호가 포함된 Oracle 문자열의 정렬 문제 해결

숫자와 특수 기호가 포함된 Oracle 문자열의 정렬 문제 해결

小云云
小云云원래의
2017-12-11 13:19:313249검색

이 기사에서는 Oracle 문자열에 숫자와 특수 기호가 포함된 정렬 문제를 해결하는 방법을 공유합니다. 최근 한 프로젝트에서 특정 커뮤니티를 커뮤니티, 건물, 호, 호실에 따라 분류해야 한다는 요구가 있었습니다. 아주 간단한 요구사항인 것 같고 SQL 문 하나로 해결이 가능합니다. 실제로 루틴이 매우 깊습니다. 아래에서는 Oracle 문자열의 숫자 및 특수 기호 정렬 문제를 공유하겠습니다. 당신을 도울 수 있습니다.

문제 설명:

 특정 커뮤니티를 커뮤니티, 건물, 호, 방 번호별로 정렬해야 하는데, 주소 설명별로 정렬하면 문자열에 숫자가 포함되어 있으므로 다음과 같은 결과가 발생합니다.

건물 1 다음에는 건물 2여야 하는데 쿼리 결과는 건물 10입니다.

풀어보세요

정규식을 사용하여 대체

결과:

건물 번호 정렬은 정상이지만 방 번호 정렬이 혼란스럽다는 것을 알게 될 것입니다. 계속해서 해결책을 생각해 보세요

궁극적인 해결책:

번역 기능

을 사용하여 결과가 정상적으로 표시되는지 확인하세요.

번역 사용 방법은 아래 첨부합니다

1. 구문:

TRANSLATE(string,from_str,to_str) TRANSLATE(string,from_str,to_str)

二、目的

返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。

三、允许使用的位置

过程性语句和SQL语句。

四、示例

Sql代码

SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; 
 TRANSLATE ( 
 -------------- 
 123456ghij 
 SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; 
 TRANSL 
 ---------- 
 123456

语法: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

语法:TRANSLATE(expr,from,to)

2. 목적

Return(모두 발생) from_str의 각 문자는 to_str 및 후속 문자열의 해당 문자로 대체됩니다. TRANSLATE는 REPLACE가 제공하는 기능의 상위 집합입니다. from_str이 to_str보다 긴 경우 from_str에는 있지만 to_str에는 없는 추가 문자는 해당 대체 문자가 없기 때문에 문자열에서 제거됩니다. to_str은 비워둘 수 없습니다. Oracle은 빈 문자열을 NULL로 해석하며, TRANSLATE의 매개변수 중 하나라도 NULL이면 결과는 NULL입니다.

3. 허용되는 위치

절차문 및 SQL문.

4. 예

Sql code

select translate('abcbbaadef','ba','#@') from dual (b将被#替代,a将被@替代)
select translate('abcbbaadef','bad','#@') from dual (b将被#替代,a将被@替代,d对应的值是空值,将被移走)

문법: TRANSLATE(expr,from,to)

expr: 문자열을 나타냅니다. from 왼쪽과 오른쪽 사이에 일대일 대응이 있는 경우 해당 관계가 없으면 null 값으로 간주됩니다.

예:

SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX')                       "License"FROM DUAL

따라서 결과는 다음과 같습니다: @#c##@@def 및 @#c##@@ef

구문: ​​TRANSLATE(expr,from,to) code><br>

expr: from 및 to가 왼쪽에서 오른쪽으로 일대일 대응되는 문자열을 나타냅니다. 대응할 수 없는 경우 null 값으로 간주됩니다.

예:

SELECT TRANSLATE(&#39;2KRW229&#39;,&#39;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;,&#39;0123456789&#39;) "Translate example"FROM DUAL

따라서 결과는 다음과 같습니다: @#c##@@def 및 @#c##@@ef

예는 다음과 같습니다.

예 1: 숫자를 9로 변환합니다. , 기타 대문자를 X로 변환하거나 그 반대로 변환합니다.

SELECT TRANSLATE(&#39;我是中国人,我爱中国&#39;, &#39;中国&#39;, &#39;China&#39;) "Translate example"
FROM DUAL


예 2: 숫자는 유지하고 다른 대문자는 삭제하세요.

SELECT TRANSLATE(&#39;I am Chinese, I love China&#39;, &#39;China&#39;, &#39;中国&#39;) "Translate example"
FROM DUAL

Luo Yong은 다음 예를 추가했습니다.

예 3: 이 예는 to_string의 문자 수가 from_string보다 많은 경우 바이트 단위가 아닌 문자 단위로 처리됨을 증명합니다. 문자 수는 중요하지 않은 것 같으며 예외가 발생하지 않습니다.

SELECT TRANSLATE(&#39;2KRW229&#39;,
&#39;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;,
&#39;&#39;) "License"
FROM DUAL

예 4: 다음 예는 from_string의 문자 수가 to_string보다 크면 추가 문자가 제거된다는 것을 증명합니다. 즉, char 매개변수에서 세 문자 ina가 제거됩니다. , 사이즈가 구별됩니다.

🎜🎜🎜🎜🎜
SELECT TRANSLATE(&#39;中国人&#39;,
substr(&#39;中国人&#39;,1,length(&#39;中国人&#39;) - 1),
rpad(&#39;*&#39;,length(&#39;中国人&#39;),&#39;*&#39;)) "License"
  FROM DUAL
🎜🎜🎜예 5: 다음 예에서는 두 번째 매개 변수가 빈 문자열인 경우 전체 함수가 null을 반환한다는 것을 증명합니다. 🎜🎜🎜rrreee🎜🎜🎜예 6: 은행 송금을 할 때 계좌 소유자 이름의 마지막 글자만 표시되고 나머지는 별표로 대체되는 경우가 종종 있습니다. 비슷한 것을 만들기 위해 번역을 사용하겠습니다. 🎜🎜🎜rrreee🎜🎜🎜이러한 문제가 발생하면 위의 방법을 시도해 볼 수 있습니다. 🎜🎜🎜관련 권장 사항: 🎜🎜🎜Oracle의 Contains 함수 사용 요약 정보🎜🎜🎜🎜Oracle 페이징 쿼리의 기본 원리에 대한 자세한 설명🎜🎜🎜🎜Oracle 프로그램 개발 팁🎜🎜

위 내용은 숫자와 특수 기호가 포함된 Oracle 문자열의 정렬 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.