오라클 필드의 값이 기록 분할의 복수를 기록하는

머리말

발생 등의 수요 전에 대한 기록은 잡았이 시간, 간단하게 녹음 없었다.

本文个人拙见,若有出入,请指出——来自菜的颤抖

장면

컨테이너, 컨테이너 기록, 컨테이너의 지시 조작에 저장된 테이블 B에 저장된 정보의 테이블, 명령 세미콜론으로 분리 용기의 수의 복수 포함 ;컷 ( TCIU2347687;XUTR3546865명령이있다 경우), 현재 수요는 표 A를 조회 할 때 테이블 B 기, 여과한다.

  • 생각하기 쉬운 not in,하지만 세미콜론으로 구분.
  • 둘째, not like그러나 [Err] ORA-01427: 单行子查询返回多个行, 그것은 표현 like단지 하나의 값 퍼지 쿼리를 받아 들일 뒤에.

이는 별도의 레코드들로 분할, 기록 세미콜론으로 분리되어야한다.
단일 기록
된다 :
절단 후

실현

오라클 사용할 수 있습니다 regexp_substr函数달성과 같은 SQL 위의 컷 달성하기 위해 :

select regexp_substr('TCIU2347687;XUTR3546865', '[^;]+', 1, level) JZXXH
from dual connect by level <= regexp_count('TCIU2347687;XUTR3546865', ';') + 1

하는 regexp_substr의미의 매개 변수 :

  • TCIU2347687;XUTR3546865 이 문자열 일치를 (난 그냥 테이블 열 수 실제 상황에서, 예를하기 위해 여기입니다) 분할의 필요성을 나타냅니다.
  • [^;]+일반적인 정규 표현식, 나는 그것을 분할 규칙을 결정하고, 여기에 세미콜론을 잘라 多个不是分号的字符때문에 세미콜론 완전한 문자열을 얻을 종료됩니다 경험.
  • 1시작 위치, 맨 왼쪽은 ( 오라클 첨자 1 시작이다 )
  • level그것은 여러 경기의 첫 번째 나타냅니다.
    그런 다음 문으로보기 직선 기능의이 점을 이해하기 위해 :
select REGEXP_SUBSTR('aaa;bbb','[^;]+',1,1) AS STR FROM dual; 

그 결과 인 aaa상기 제 2가 1이되면, 출력된다 bbb.
음, 의도의이 부분은 분명하다, 여기에 각 절삭 문자열을 걸릴 것입니다, 위 참조 가지고 level个, 이것은 level상기 보면,이 전에 그것을 무엇이며 regexp_count(string, c)실제로 매우 잘 이해하고있다 기능, 문자열을 반환 (C)의 수.
그런 다음 의사 열 수있는 레벨을 제공하고, ROWNUM 유사한,

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=2; 

수평
그래서 다시 원래의 SQL로도 잘 이해.

최종적으로

감사합니다, 경례

추천

출처www.cnblogs.com/numen-fan/p/11365553.html