Oracle SQL- 이름 문자열을 구문 분석하고 첫 번째 초기 및 성으로 변환합니다.

StackOverflow https://stackoverflow.com/questions/371490

  •  21-08-2019
  •  | 
  •  

문제

이 끈을 돌리는 방법을 아는 사람이 있습니까? "Smith, John R"
이 끈으로 : "JSMITH"?

하위 ()로 모든 것을 소문자로 만들어야합니다.
쉼표가있는 위치를 찾고 정수 위치 값입니다.
그 쉼표 이후 첫 번째 캐릭터를 얻고 문자열 앞에 놓으십시오.
그런 다음 성 전체를 가져 와서 첫 번째 이니셜 이후에 붙입니다.

SideNote -inst () 함수는 내 버전과 호환되지 않습니다.

도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

자신의 악기 기능을 작성하여 시작하십시오 - 예를 들어 My_instr이라고 부릅니다. char 1에서 시작하고 a ','를 찾을 때까지 루프가 시작됩니다.

그런 다음 악기처럼 사용하십시오.

다른 팁

이를 수행하는 가장 좋은 방법은 다음과 같은 Oracle 일반 표현식 기능을 사용하는 것입니다.

SELECT LOWER(regexp_replace('Smith, John R', 
             '(.+)(, )([A-Z])(.+)', 
             '\3\1', 1, 1)) 
  FROM DUAL;

즉, 1) 문자 세트의 패턴을 찾으면 ",", 그 다음에 대문자 문자, 나머지 문자가 뒤 따르는 다음 세 번째 요소 (이름의 이니셜)을 가져 와서 성을 추가하십시오. 그런 다음 모든 것을 소문자로 만드십시오.

귀하의 부수적 참고 : "Instr () 함수는 내 버전과 호환되지 않습니다"는 그 기능이 나에게 해당되는 경우에 적합하지 않습니다. 버전 9i의 일반 표현식이 Oracle에만 추가되었으므로 버전을 확인하십시오.

요점에 감사드립니다.

-- 스튜

instr ()는 뭐의 버전과 호환되지 않습니까? 신탁? 버전 4 등을 사용하고 있습니까?

자신의 기능을 만들 필요가 없으며 솔직히, 이미 존재하는 SQL 기능으로 상당히 쉽게 수행 할 수있는 시간 낭비 인 것 같습니다. 조잡한 데이터 입력을 고려하기 위해주의를 기울여야합니다.

언급 된 목표를 달성하는 또 다른 방법은 다음과 같습니다.

with name_list as
  (select '   Parisi, Kenneth R' name from dual)
select name
      -- There may be a space after the comma.  This will strip an arbitrary
      -- amount of whitespace from the first name, so we can easily extract
      -- the first initial.
     , substr(trim(substr(name, instr(name, ',') + 1)), 1, 1) AS first_init
      -- a simple substring function, from the first character until the
      -- last character before the comma.
     , substr(trim(name), 1, instr(trim(name), ',') - 1) AS last_name
      -- put together what we have done above to create the output field      
     , lower(substr(trim(substr(name, instr(name, ',') + 1)), 1, 1)) ||
       lower(substr(trim(name), 1, instr(trim(name), ',') - 1)) AS init_plus_last
  from name_list;  

HTH, GABE

나는 당신이 적절한 악기 ()에 액세스 할 수 없다고 믿기 힘들지만,이 경우 자신의 버전을 구현하십시오.

당신이 그것을 곧게 냈다고 가정하면 :

select 
  substr( 
      lower( 'Smith, John R' )
    , instr( 'Smith, John R', ',' ) + 2
    , 1 
  ) || -- first_initial
  substr( 
      lower( 'Smith, John R' )
    , 1
    , instr( 'Smith, John R', ',' ) - 1 
  ) -- last_name
from dual;

또한 모든 이름이 해당 형식에 있다는 가정에주의하십시오. 쉼표 이후의 단일 공간 이외의 다른 것을 조심하십시오.“Parisi, Jr.”등과 같은 데이터가있는 성은 이름을 조심하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top