在 SQL 中将字母转换为数字

Posted

技术标签:

【中文标题】在 SQL 中将字母转换为数字【英文标题】:Convert letters in to numbers in SQL 【发布时间】:2018-05-12 12:39:34 【问题描述】:

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

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

【问题讨论】:

为什么您的问题被标记为 Excel?代码应该是什么?你用的是什么数据库?数据库表没有“单元格”,那是什么意思?样本数据和期望的结果也很有帮助。 对不起,我正在通过 excel 使用 SQL 【参考方案1】:

大多数数据库都有一些确定值是否为数字的方法。例如,在 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)

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

【讨论】:

【参考方案2】:

如果您想将字母映射到数字,例如将字母等级映射到数值,您可以使用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

【讨论】:

您好,谢谢。这不太行我不知道为什么,当我将所有字母都放入时,sql只给我一个包含1和3的列,例如0。你知道为什么吗? @helena5050 您需要提供样本数据和预期结果,因为从您的描述中不清楚。

以上是关于在 SQL 中将字母转换为数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中将数字转换为日期时间

在 SQL 中将数字转换为单词 [重复]

如何在sql中将数字转换为日期

在sql server中将数据和时间转换为数字

如何在 SQL 中将 varchar2 转换为数字

如何在 C++ 中将十六进制数字转换为二进制?