如何检查字符串是否包含数字

时间:2012-07-05 09:28:55

标签: sql oracle

我需要检查字符串是否包含数字。任何数字。 不是字符串或字符串是数字,但如果它包含一个数字。

示例:

'test'=没有数字。

'test2'=包含数字。

4 个答案:

答案 0 :(得分:15)

使用regular expression

SELECT *
FROM test
WHERE REGEXP_LIKE(testcol, '[[:digit:]]');

不使用正则表达式:

SELECT *
FROM test
WHERE testcol LIKE '%0%'
    OR testcol LIKE '%1%'
    OR testcol LIKE '%2%'
    OR testcol LIKE '%3%'
    OR testcol LIKE '%4%'
    OR testcol LIKE '%5%'
    OR testcol LIKE '%6%'
    OR testcol LIKE '%7%'
    OR testcol LIKE '%8%'
    OR testcol LIKE '%9%'

答案 1 :(得分:4)

这是我用来检测字符串是否包含数字的技术:

select LAST_NAME, 'contains a number'
  FROM names
 where translate(LAST_NAME, '', '0123456789') <> LAST_NAME

通过将数字转换为空字符串来工作。如果字符串保持不变,则它不能包含数字。

此技术也可用于测试字符串是否为所有数字

select TEL_NUMBER, 'is all numbers'
  FROM names
 where trim(translate(TEL_NUMBER, '', '-0123456789')) = ''

对于电话号码我包括短划线,因为电话号码通常包含破折号。

答案 2 :(得分:0)

我会尝试使用正则表达式。像:

select regexp_instr('%[0-9]%',@str1) from table_name;

干杯 --Jocke

答案 3 :(得分:0)

我有时在NetSuite保存的搜索中使用REGEXP_INSTR,因为SQL函数是有限的。如果没有找到数字,则返回零,或者在字符串中找到第一个数字的起始位置:

REGEXP_INSTR(my_var, '[[:digit:]]')

此示例返回零:

REGEXP_INSTR('test', '[[:digit:]]')

此示例返回一个大于零的数字,因为它找到了一个数字:

REGEXP_INSTR('test2', '[[:digit:]]')