0

我需要在 oracle 9i 中找到具有 varchar2 列的行,该列在文本中包含一个 10 位数字。

例如“一些字符 aftuivhe 7524941842 一些更多字符”

10 位数字可以是文本中的任何位置。

4

3 回答 3

1

检查这个:

对于 Oracle 9i

WITH TEST
    AS (SELECT
             'some characters aftuivhe 7524941842 some more characters' BRNO
        FROM
             DUAL
        UNION ALL
        SELECT
             'some characters aftuivhe 1234567890 some more 1234567890 characters'
                 BRNO
        FROM
             DUAL
        UNION ALL
        SELECT
             '7524941842 some characters aftuivhe  some more characters'
                 BRNO
        FROM
             DUAL
        UNION ALL
        SELECT
             'characters some characters aftuivhe  some more 7524941842 '
                 BRNO
        FROM
             DUAL)
SELECT
      SUBSTR (
             TRIM (
                   TRANSLATE (
                            BRNO,
                            '0abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                            '0' ) ),
             0,
             10 )
FROM
      TEST

适用于 Oracle 10G 及以上

WITH TEST
    AS (SELECT
             'some characters aftuivhe 7524941842 some more characters' BRNO
        FROM
             DUAL
        UNION ALL
        SELECT
             'some characters aftuivhe 1234567890 some more characters' BRNO
        FROM
             DUAL
        UNION ALL
        SELECT
             '7524941842 some characters aftuivhe  some more characters'
                 BRNO
        FROM
             DUAL
        UNION ALL
        SELECT
             'characters some characters aftuivhe  some more 7524941842 '
                 BRNO
        FROM
             DUAL)
SELECT
      REGEXP_SUBSTR ( BRNO,
                   '[[:digit:]]{10}' ) AS RESULT
FROM
      TEST
WHERE
      REGEXP_LIKE ( BRNO,
                 '[[:digit:]]' );


RESULT
7524941842
1234567890
7524941842
7524941842
于 2013-09-26T10:22:09.503 回答
0

如果字符串中有 10 位数字(a、b、C、&、%、$、# 等)以外的任何字符,则可以使用以下方法。

假设只有一个十位数字,没有其他数字。逻辑是过滤不是数字的字符,然后将它们替换为空白

带有Sql fiddle Link的示例

select  translate('etdgdb @# 1234567890 kgmn wwjw',
'A'||translate('etdgdb @# 1234567890 kgmn wwjw','A1234567890','A')
,'A')
 from dual;
于 2013-10-18T06:09:14.407 回答
0

像这样试试

SELECT LENGTH(REPLACE(TRANSLATE(lower('aftuivhe 7524941842'),'abcdefghijklmnopqrstuvwxyz',' '),' ',''))
FROM  dual;
于 2013-09-26T10:34:45.057 回答