我需要检查一个字符串是否包含一个数字。任何数字。不是字符串是否是数字,而是它是否包含一个数字。
例子:
'测试' = 没有数字。
'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', '')) = ''
对于电话号码,我包括一个破折号,因为电话号码通常包含破折号。
我会尝试使用正则表达式。像:
select regexp_instr('%[0-9]%',@str1) from table_name;
干杯——乔克
由于 SQL 函数有限,我有时会在 NetSuite 保存的搜索中使用 REGEXP_INSTR。如果没有找到数字,或者在字符串中找到第一个数字的起始位置,则返回零:
REGEXP_INSTR(my_var, '[[:digit:]]')
此示例返回零:
REGEXP_INSTR('test', '[[:digit:]]')
此示例返回一个大于零的数字,因为它找到了一个数字:
REGEXP_INSTR('test2', '[[:digit:]]')