在 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
表达式。
假设成绩为A
、B
、C
、D
和F
,您可以按如下方式进行:
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 中将字母转换为数字的主要内容,如果未能解决你的问题,请参考以下文章