如何从下面找出连续数字(没有空格)
123456789,
1 2 3 4 5678,
12 34 56 78,
1234 56,
4782828,
677 56 764,
467 567 675,
输出如:
123456789,
4782828
如何获得上述输出?
答案 0 :(得分:2)
如果这是表格中的一列:
select *
from t
where col not like '% %';
答案 1 :(得分:2)
您还可以使用translate()
功能进行此项检查:
WITH your_table AS (SELECT '123456789' str FROM dual UNION ALL
SELECT '1 2 3 4 5678' str FROM dual UNION ALL
SELECT '12 34 56 78' str FROM dual UNION ALL
SELECT '1234 56' str FROM dual UNION ALL
SELECT '4782828' str FROM dual UNION ALL
SELECT '677 56 764' str FROM dual UNION ALL
SELECT '467 567 675' str FROM dual UNION ALL
SELECT '4a5' str FROM dual)
SELECT str
FROM your_table
WHERE TRANSLATE(str, 'a1234567890', 'a') IS NULL;
STR
---------------
123456789
4782828
TRANSLATE()
是一个允许您指定要翻译的字符串和字符串的函数。即如果你想把所有的东西都变成b等等。
在我们的例子中,我们想要将所有数字更改为空,然后检查结果字符串是否也为空,因为这意味着字符串只包含数字。
所以TRANSLATE(str, 'a1234567890', 'a')
读起来像:
因此,12345
字符串最终会以空字符串结尾,但字符串1b2
最终会以b
结尾,因为b不受翻译的影响。
此方法比指定要忽略的字符更灵活,因为您感兴趣的字符数量要少得多(9位数)。
答案 2 :(得分:-2)
检查出来
CREATE TABLE recipes (
recipe_name VARCHAR(30));
INSERT INTO recipes
(recipe_name)
VALUES
('123456789')
,('1 2 3 4 5678')
,('12 34 56 78')
,('1234 56')
,('4782828')
,('677 56 764')
,('467 567 675')
SELECT recipe_name FROM recipes
where (LEN(recipe_name + '@') - LEN(REPLACE(recipe_name, ' ', '') + '@'))=0