두 개의 FROM
절 중 하나에 일치하는 SELECT
절이 없으므로 쿼리에 잘못된 구문이 있습니다.
또한이 : 문자열이 1
인 Y
LEVEL
로 시작하여 INSTR('YYYY', 'Y', 1, 1)
이 1
하고 다음 필터가 진실하지 않은 CONNECT BY 1 < 1
때 작동하지 않습니다
CONNECT BY level < instr(MyColumn, 'Y', 1, level)
. CONNECT BY INSTR(MyColumn, 'Y', 1, LEVEL) > 0
을 확인하고 싶습니다.
Y
문자가없는 경우에도 계층 적 쿼리로 항상 적어도 하나의 행을 반환하는 경우 다른 필터가 필요합니다.
당신은 상관 하위 쿼리를 사용하도록 쿼리를 적용 할 수
:
SQL Fiddle
오라클 11g R2 스키마 설정 :
CREATE TABLE MyTable(MyColumn) AS
SELECT 'NNNNNYYNNNNNYYNNNNNYYNNNNNYYNNN' FROM DUAL UNION ALL
SELECT 'NNYYNNNNNYYNNNNNYYNNNNNYYNNN' FROM DUAL UNION ALL
SELECT 'YYNNNNNYYNNNNNYYNNNNNYYNNNNNYY' FROM DUAL UNION ALL
SELECT 'YYNNNNNYYNNNNNYYNNNNNYYNNNNNYYN' FROM DUAL UNION ALL
SELECT 'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN' FROM DUAL
검색어 1 :
SELECT (
SELECT LISTAGG(INSTR(t.MyColumn, 'Y', 1, LEVEL), ' ')
WITHIN GROUP (ORDER BY LEVEL)
FROM DUAL
WHERE INSTR(t.MyColumn, 'Y') > 0
CONNECT BY INSTR(t.MyColumn, 'Y', 1, LEVEL) > 0
) AS Y_position
FROM Mytable t
을
Results :
| Y_POSITION |
|---------------------------|
| 6 7 13 14 20 21 27 28 |
| 3 4 10 11 17 18 24 25 |
| 1 2 8 9 15 16 22 23 29 30 |
| 1 2 8 9 15 16 22 23 29 30 |
| (null) |
출처
2017-12-13 12:39:44
MT0