将字母转换为SQL

时间:2018-05-12 12:39:35

标签: sql excel

我必须在列中找到包含字母和数字的数字的平均值。由于AVG()仅在列仅包含数字时才有效,因此我必须将字母更改为数字或将其更改为空白单元格。这就是我现在所拥有但不起作用的

declare Grade as integer 
cast(replace(replace(replace(grades.grade,'A',''),'B',''),'C','') as int) as cleanGrade 

2 个答案:

答案 0 :(得分:0)

大多数数据库都有一些确定值是否为数字的方法。例如,在SQL Server中,您可以使用try_convert()

select avg(try_convert(decimal(10, 4), grade))

或者在MySQL中,您可以使用:

select (case when grade regexp '^[0-9]*[.]?[0-9]*$' then grade end)

大多数其他数据库都有类似的逻辑。

答案 1 :(得分:0)

如果您希望将字母映射到数字,例如,将字母等级映射到数值,则可以使用CASE ... WHEN ... THEN ... END表达式。

假设成绩为ABCDF,您可以按以下方式执行:

SELECT AVG(
    CASE Grade
        WHEN 'A' THEN 100
        WHEN 'B' THEN 90
        WHEN 'C' THEN 80
        WHEN 'D' THEN 60
        WHEN 'F' THEN 0
        ELSE CAST(Grade AS int)
    END
)
FROM Grades