首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle :Oracle8i中REGEXP_LIKE函数的替代

Oracle :Oracle8i中REGEXP_LIKE函数的替代
EN

Stack Overflow用户
提问于 2011-05-11 11:39:00
回答 3查看 5.1K关注 0票数 2

我有一个在where子句中使用REGEXP_LIKE函数的SQL,现在我需要将在Oracle8i中运行的该函数的等价物。

正则表达式如下所示:

代码语言:javascript
复制
where REGEXP_LIKE(parm, '^[PMF][[:digit:]]+[_].*')

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-11 12:32:46

你可以试一试

代码语言:javascript
复制
WHERE SUBSTR(parm,1,1) IN ('P','M','F')
AND substr(parm,2,1) between '0' and '9'
AND substr(ltrim(substr(parm,2),'0123456789'),1,1) = '_'

第一个字符是P、M或F。第二个字符是数字第二个字符,从左开始剥离所有数字,应以下划线开头

PS。请拍摄您的8i数据库。不仅8i失去了支持,9i和10g也失去了支持(或者至少它们处于“降级,请停止使用”的支持级别)。

票数 6
EN

Stack Overflow用户

发布于 2011-05-11 12:50:01

在谷歌上搜索一下,似乎有一个名为OWA_PATTERN的包,早在8i就可以使用了。它提供了大量的正则表达式支持。它显然是PL/SQL Web Toolkit安装的一部分。它可能在您的8i安装中可用,也可能不可用。请与数据库管理员联系以获取数据库。

引用它的Here is a 9i document

票数 3
EN

Stack Overflow用户

发布于 2011-05-11 12:14:49

不幸的是,在REGEXP_LIKE之前,情况相当严峻。在倾盆大雨中,我们不得不手工完成这项工作,两种方式都是如此。像这样的东西可能是必要的:

代码语言:javascript
复制
WHERE SUBSTR(parm,1,1) IN ('P','M','F')
AND digits_followed_by_underscore(SUBSTR(parm,2)) = 'Y'

使用以下步骤(警告:匆忙黑在一起,未经过测试):

代码语言:javascript
复制
CREATE PROCEDURE digits_followed_by_underscore(v IN VARCHAR2)
  RETURN VARCHAR2 IS
  digit_found VARCHAR2(1) := 'N';
BEGIN
  IF LENGTH(v) = 0 THEN
    RETURN 'N';
  END IF;
  FOR i IN 1..LENGTH(v) LOOP
    IF SUBSTR(v,i,1) BETWEEN '0' AND '9' THEN
      digit_found := 'Y';
    ELSIF SUBSTR(v,i,1) = '_' THEN
      RETURN digit_found;
    ELSE
      RETURN 'N';
    END IF;
  END LOOP;
  RETURN 'N';
END;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5958958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档