我需要在 oracle 9i 中找到具有 varchar2 列的行,该列在文本中包含一个 10 位数字。
例如“一些字符 aftuivhe 7524941842 一些更多字符”
10 位数字可以是文本中的任何位置。
检查这个:
对于 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
如果字符串中有 10 位数字(a、b、C、&、%、$、# 等)以外的任何字符,则可以使用以下方法。
假设只有一个十位数字,没有其他数字。逻辑是过滤不是数字的字符,然后将它们替换为空白
select translate('etdgdb @# 1234567890 kgmn wwjw',
'A'||translate('etdgdb @# 1234567890 kgmn wwjw','A1234567890','A')
,'A')
from dual;
像这样试试
SELECT LENGTH(REPLACE(TRANSLATE(lower('aftuivhe 7524941842'),'abcdefghijklmnopqrstuvwxyz',' '),' ',''))
FROM dual;