오른쪽에서 줄을 잡다
저는 오라클에 문의 사항을 작성하고 있습니다.
저는 오른쪽에서 줄을 받고 싶은데 줄 길이가 동적입니다.
예:
299123456789
123456789를 받고 싶습니다.
substr(PHONE_NUMBERS,-X,Y)
X는 각 레코드마다 다릅니다.
시도해 봤습니다.
substr(PHONE_NUMBERS,-length(PHONE_NUMBERS),Y)
그리고 그것은 작동하지 않았습니다.
이 쿼리를 어떻게 작성할 수 있습니까?
마지막 3개의 문자를 나열하려면 가장 간단한 방법입니다.
select substr('123456',-3) from dual;
SQL> select substr('123456',-1,6) from dual;
S
-
6
SQL> select substr('123456',-6,6) from dual;
SUBSTR
------
123456
SQL> select substr('123456',-7,6) from dual;
S
-
위의 문장을 보면 3 쿼리는 null 값을 -7 > length('123456')로 제공합니다.
길이를 확인합니다.CONT_PHONE_NUMBERS
그리고.PHONE_NUMBERS
이것이 당신에게 도움이 되길 바랍니다.
SQL> select substr('999123456789', greatest (-9, -length('999123456789')), 9) as value from dual;
VALUE
---------
123456789
SQL> select substr('12345', greatest (-9, -length('12345')), 9) as value from dual;
VALUE
----
12345
호출:greatest (-9, -length(string))
시작 오프셋을 문자열의 끝 또는 시작의 왼쪽 9자로 제한합니다.
나는 방금 그것을 알았습니다.regexp_substr()
이 목적에 완벽합니다 :)
저의 과제는 이론적으로 7~250자 길이의 모든 것이 될 수 있는 참조 문자열에서 오른쪽 16자를 선택하는 것입니다.그것은 나를 짜증나게 합니다.substr( OurReference , -16 )
돌아온다null
언제length( OurReference ) < 16
(한편, Oracle이 결과적으로 반환하는 것도 논리적입니다.null
방문할 때마다substr()
문자열의 경계를 초과합니다.)그러나 문자열이 끝나기 직전에 1에서 16 사이의 모든 문자를 인식하도록 정규식을 설정할 수 있습니다.
regexp_substr( OurReference , '.{1,16}$' )
정규 표현과 관련된 성능 문제에 대해서는 다음 중 어느 것을 말할 수 없습니다.GREATER()
솔루션과 이 솔루션이 가장 적합합니다.이거 시험해 본 사람?일반적으로 정규 표현은 깔끔하고 잘 쓰면 상당히 빠르다는 것을 경험했습니다.
행운을 빌어요! :)
substr(PHONE_NUMBERS, length(PHONE_NUMBERS) - 3, 4)
패턴은 다음과 같이 보일 수 있습니다.
substr(STRING, ( length(STRING) - (TOTAL_GET_LENGTH - 1) ),TOTAL_GET_LENGTH)
당신의 경우, 이것은 다음과 같을 것입니다.
substr('299123456789', (length('299123456789')-(9 - 1)),9)
substr('299123456789', (12-8),9)
substr('299123456789', 4,9)
the result ? of course '123456789'
길이는 역동적입니다, voila :)
SELECT SUBSTR('299123456789',DECODE(least(LENGTH('299123456789'),9),9,-9,LENGTH('299123456789')*-1)) value from dual
123456789를 제공합니다.
숫자가 9자리 미만인 경우에도 동일한 문이 작동합니다.
SELECT SUBSTR('6789',DECODE(least(LENGTH('6789'),9),9,-9,LENGTH('6789')*-1)) value from dual
6789 제공
저도 같은 문제가 있었습니다.이것은 저에게 효과가 있었습니다.
CASE WHEN length(sp.tele_phone_number) = 10 THEN
SUBSTR(sp.tele_phone_number,4)
아래 솔루션은 이러한 목적에 적합합니다.
select mod('299123456789',1000000000) from dual;
가장 간단한 솔루션:
substr('299123456',-6,6)
언급URL : https://stackoverflow.com/questions/3440849/get-string-from-right-hand-side
'programing' 카테고리의 다른 글
Ionic 2 - 앱용 글로벌 NavBar (0) | 2023.06.30 |
---|---|
Firebase용 클라우드 기능 - getaddrinfo ENOTFound (0) | 2023.06.30 |
UI WebView 내에서 HTML 및 로컬 이미지 사용 (0) | 2023.06.30 |
C 프로그래밍에서 배열에 요소를 추가하는 방법을 설명할 수 있는 사람이 있습니까? (0) | 2023.06.30 |
Giton 비트 버킷:공용 SSH 키를 업로드한 후에도 항상 암호를 요청함 (0) | 2023.06.30 |