2017-10-05 2 views
1

내가 문자열 'KK12340000'을 가지고 내가 같은 것을 사용할 수 있도록 KK 후 처음 4 자리 숫자는 오름차순 인 경우에만 그것을 유효성을 검사 할 :REGEXP_LIKE의 ASC 번호

select case when REGEXP_LIKE('KK12340000', '^KK(?=\d{4})(?:(.)\\1*|0?1?2?3?4?5?6?7?8?9?)\d{4}$') then 1 else 0 end as valid from dual; 

을하지만 그래서 0을 반환 그것입니다 오라클에서 번호를 오름차순으로 검증 할 수 있습니까?

+0

뭔가를 시도 할 수 있습니다. 주어진 문자열이 정렬되어 있는지 확인하는 함수를 만들 수 있습니다. 함수에서, 당신은 입력을 통해 반복하면, 당신은'O (n)'을가집니다. 이제 당신의 질문은'400 자 '에 대해'4 자릿수'입니까? 정규식에 모든 ascii 문자를 넣을 건가요? – Kent

답변

2

이 시도 :

SELECT CASE 
      WHEN REGEXP_LIKE (
        'KK12230000', 
        '^KK(?:(.)\\1*|0?1?2?3?4?5?6?7?8?9?)\d{4}$') 
      THEN 
      1 
      ELSE 
      0 
     END 
      AS valid 
    FROM DUAL; 
+0

작동하지만 유효한 번호로 1223의 유효성을 검사합니다./ – mAtsea

+0

고마워요. 그래, 조금 미안 해요. 대답은 100 % 지금 작동합니다. – mAtsea

+0

@mAtsea. 그거 듣기 좋네. – XING

-1

당신은 IMO, 이것은 당신이 정규식하여 해결할 수에도 불구하고,에서 좋은 정규식 작업이 아닌이

SELECT 'KK12340000' LIKE 'KK%' AND 
SUBSTRING('KK12340000', 3, 1) - SUBSTRING('KK12340000', 4, 1) < 0 AND 
SUBSTRING('KK12340000', 4, 1) - SUBSTRING('KK12340000', 5, 1) < 0 AND 
SUBSTRING('KK12340000', 5, 1) - SUBSTRING('KK12340000', 6, 1) < 0