SQL - 仅从列

时间:2017-11-19 10:41:44

标签: sql regex oracle

我的列中包含数字(包括负值),字母,字母数字和单字符符号(如 - ,&,@)。

如何摆脱字母,字母数字和符号,并得到列的总和。

我必须仅在select语句中使用条件而不是where条件。因为它不应该影响其他列结果。

这是我尝试过的:

SELECT COUNT(*), CASE
    WHEN REGEXP_LIKE(REMD_PART_CSN, '^-?[0-9]\d*(\.\d+)?$') THEN SUM(REMD_PART_CSN)
    ELSE NULL
END
FROM <TABLE>

column values

1 个答案:

答案 0 :(得分:2)

这个怎么样?

SELECT
    COUNT(*),
    SUM(
        CASE
            WHEN REGEXP_LIKE(REMD_PART_CSN, '^-?\d+(\.\d+)?$')
                THEN CAST(REMD_PART_CSN AS NUMBER)
            ELSE 0
        END
    )
FROM yourtable

即。对于每一行,如果REMD_PART_CSN看起来像一个数字,则将其转换为数字,否则请使用0。最后,返回所有这些值的总和。