9

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

例子:

'测试' = 没有数字。

'test2' = 包含数字。

4

4 回答 4

24

使用正则表达式

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%'
于 2012-07-05T09:34:30.083 回答
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', '')) = ''

对于电话号码,我包括一个破折号,因为电话号码通常包含破折号。

于 2013-08-25T01:10:39.657 回答
0

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

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

干杯——乔克

于 2012-07-05T09:34:05.203 回答
0

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

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

此示例返回零:

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

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

REGEXP_INSTR('test2', '[[:digit:]]')
于 2016-01-29T19:07:32.557 回答