2017-10-05 41 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