집 >데이터 베이스 >MySQL 튜토리얼 >숫자와 특수 기호가 포함된 Oracle 문자열의 정렬 문제 해결
이 기사에서는 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 codeselect translate('abcbbaadef','ba','#@') from dual (b将被#替代,a将被@替代) select translate('abcbbaadef','bad','#@') from dual (b将被#替代,a将被@替代,d对应的值是空值,将被移走)문법: TR
ANSLATE(expr,from,to)
expr: 문자열을 나타냅니다. from 왼쪽과 오른쪽 사이에 일대일 대응이 있는 경우 해당 관계가 없으면 null 값으로 간주됩니다. 예:
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') "License"FROM DUAL
따라서 결과는 다음과 같습니다: @#c##@@def 및 @#c##@@ef
구문: TRANSLATE(expr,from,to) code><br>
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789') "Translate example"FROM DUAL따라서 결과는 다음과 같습니다: @#c##@@def 및 @#c##@@ef예는 다음과 같습니다.예 1: 숫자를 9로 변환합니다. , 기타 대문자를 X로 변환하거나 그 반대로 변환합니다.
SELECT TRANSLATE('我是中国人,我爱中国', '中国', 'China') "Translate example" FROM DUAL
예 2: 숫자는 유지하고 다른 대문자는 삭제하세요.
SELECT TRANSLATE('I am Chinese, I love China', 'China', '中国') "Translate example" FROM DUAL
예 3: 이 예는 to_string의 문자 수가 from_string보다 많은 경우 바이트 단위가 아닌 문자 단위로 처리됨을 증명합니다. 문자 수는 중요하지 않은 것 같으며 예외가 발생하지 않습니다.
SELECT TRANSLATE('2KRW229', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '') "License" FROM DUAL
예 4: 다음 예는 from_string의 문자 수가 to_string보다 크면 추가 문자가 제거된다는 것을 증명합니다. 즉, char 매개변수에서 세 문자 ina가 제거됩니다. , 사이즈가 구별됩니다.
🎜🎜🎜🎜🎜SELECT TRANSLATE('中国人', substr('中国人',1,length('中国人') - 1), rpad('*',length('中国人'),'*')) "License" FROM DUAL🎜🎜🎜예 5: 다음 예에서는 두 번째 매개 변수가 빈 문자열인 경우 전체 함수가 null을 반환한다는 것을 증명합니다. 🎜🎜🎜rrreee🎜🎜🎜예 6: 은행 송금을 할 때 계좌 소유자 이름의 마지막 글자만 표시되고 나머지는 별표로 대체되는 경우가 종종 있습니다. 비슷한 것을 만들기 위해 번역을 사용하겠습니다. 🎜🎜🎜rrreee🎜🎜🎜이러한 문제가 발생하면 위의 방법을 시도해 볼 수 있습니다. 🎜🎜🎜관련 권장 사항: 🎜🎜🎜Oracle의 Contains 함수 사용 요약 정보🎜🎜🎜🎜Oracle 페이징 쿼리의 기본 원리에 대한 자세한 설명🎜🎜🎜🎜Oracle 프로그램 개발 팁🎜🎜
위 내용은 숫자와 특수 기호가 포함된 Oracle 문자열의 정렬 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!