【问题标题】:ignoring rows where a column has non-numeric characters in its value忽略列的值中包含非数字字符的行
【发布时间】:2022-01-28 03:07:31
【问题描述】:

我有一个表,其中有一列包含一些可变数据。我想只选择具有数字字符[0-9]的值的行

该列看起来像这样:

time
1545123
none
1565543
1903-294

我只想要具有第一个和第三个值的行(1545123 和 1565543)。我的方法都没有奏效。

我试过了:

WHERE time NOT LIKE '%[^0-9]+%'
WHERE NOT regexp_like(time, '%[^0-9]+%')
WHERE regexp_like(time, '[0-9]+')

我也在 CASE 语句中尝试过这些表达式,但这也是不行的。我在这里遗漏了什么吗?

这是在使用旧版本 Presto 的 Amazon Athena 上

提前致谢

【问题讨论】:

    标签: sql amazon-athena presto athena


    【解决方案1】:

    您可以使用正则表达式仅匹配 '^[0-9]+$''^\d+$' 等数字:

    -- sample data
    WITH dataset (time) AS (
        VALUES  
                            ('1545123'),
                    ('none'),
                    ('1565543'),
                    ('1903-294')
    ) 
    
    --query
    select *
    from dataset
    WHERE regexp_like(time, '^[0-9]+$')
    

    输出:

    time
    1545123
    1565543

    我想说的另一个选项在这种情况下不应该使用,但在其他一些情况下可能会有所帮助,那就是将 trycast 一起使用:

    --query
    select *
    from (
            select try(cast(time as INTEGER)) time
            from dataset
        )
    where time is not null
    

    【讨论】:

      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2018-01-14
      • 2020-10-27
      相关资源
      最近更新 更多