我需要检查一个字符串是否包含数字,不管是什么数字。
例如:
'test' = 没有数字。
'test2' = 包含数字。
使用正则表达式:
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%'
这是我用来检测一个字符串是否包含数字的技术:
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', '')) = ''
在电话号码中我加入了一个破折号,因为电话号码通常包含破折号。
我有时在NetSuite保存的搜索中使用REGEXP_INSTR,因为SQL函数受到限制。如果未找到数字,则返回零,或者返回字符串中第一个数字的起始位置:
REGEXP_INSTR(my_var, '[[:digit:]]')
这个例子返回零:
REGEXP_INSTR('test', '[[:digit:]]')
这个例子返回一个大于零的数字,因为它找到了一个数字:
REGEXP_INSTR('test2', '[[:digit:]]')
我会尝试使用正则表达式。例如:
select regexp_instr('%[0-9]%',@str1) from table_name;
祝福 --Jocke