MySQL: преобразование строки в число с плавающей запятой / десятичное на немецком языке - PullRequest
3 голосов
/ 14 ноября 2011

В MySQL-таблице у меня есть VARCHAR -колонка с разными значениями, которые могут представлять String-, Integer-, Float-, Wh независимо-значения. Эти значения записываются как специфичная для языка строка в базу данных, это означает, что значение с плавающей запятой 123.45 может быть записано как строка типа "123,45" на немецком языке (с использованием VB.Net ...)

Поскольку мне нужны средние значения значений с плавающей запятой, которые находятся в одной группе: Как я могу привести такую ​​строку к FLOAT в MySQL? Просто AVG(CONVERT(value, DECIMAL)) не будет работать (возвращает 99.00000), преобразование в FLOAT невозможно.

кодировка utf8, сопоставление utf8_general_ci.

Пример таблицы:

id | value  | group
1  | 122,45 | 1
2  |  66,34 | 1
3  | blabla | 2
4  | 109,21 | 1
5  | bababa | 2

Цель: что-то вроде SELECT AVG(CONVERT(value, DECIMAL)) FROM table WHERE (group=1) должно привести к 99.333333, а не 99.

Есть идеи?

Christoph

PS: я не делал эту структуру базы данных ...

Ответы [ 2 ]

7 голосов
/ 14 ноября 2011

Вы можете попробовать

SELECT AVG(CONVERT(
    REPLACE(REPLACE(value, '.', ''), ',', '.'), 
    DECIMAL(10,2))) 
FROM `table`
WHERE `group`=1
0 голосов
/ 19 апреля 2017

Формат строковой функции (x, d, locale) должен делать именно то, что вы хотите.Смотри https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_format

...