我需要检查字符串是否包含数字。任何数字。 不是字符串或字符串是数字,但如果它包含一个数字。
示例:
'test'=没有数字。
'test2'=包含数字。
答案 0 :(得分:15)
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:]]')