2017-10-05 42 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。因此,它是甚至可能在oracle中以升序來驗證數字?

+0

IMO,這不是正則表達式是擅長的,即使你可以用正則表達式解決它的任務。你可以創建一個函數來檢查給定的字符串是否被排序。在函數中,你循環輸入,你得到了'O(n)'。現在你的問題是'4位數','400字符'怎麼樣?你會把所有的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

你也可以嘗試這樣的事情

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