Конвертировать буквы в числа в SQL - PullRequest
0 голосов
/ 12 мая 2018

Я должен найти среднее число в столбце, который включает в себя как буквы, так и цифры. Поскольку AVG () работает только в том случае, если столбец содержит только цифры, я должен поменять буквы на цифры или заменить их на пустую ячейку. Вот что у меня сейчас но не работает

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

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Если вы хотите сопоставить буквы с цифрами, скажем, буквенные оценки с числовыми значениями, вы можете использовать выражение 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
0 голосов
/ 12 мая 2018

В большинстве баз данных есть метод определения, является ли значение числовым.Например, в 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)

Для большинства других баз данных существует аналогичная логика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...