如何找出连续数字?

时间:2018-03-09 11:26:29

标签: sql oracle

如何从下面找出连续数字(没有空格)

123456789,
1  2  3  4 5678,
12 34 56 78,
1234  56,
4782828,
677 56  764,
467  567  675,

输出如:

123456789,
4782828

如何获得上述输出?

3 个答案:

答案 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')读起来像:

  1. 走str领域。
  2. 将任何'a'字符翻译为'a'。 (我们需要这一步,因为最终参数需要包含至少一个字符。)
  3. 将任何'1'字符翻译为空(因为最终参数没有第二个字符)。
  4. 将任何'2'字符翻译为空。 ...
  5. 将任何'0'字符翻译为空。
  6. 因此,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