2011-11-14 11 views
2

MySQLテーブルでは、異なる値を持つVARCHAR列の列があります。これは、String、Integer、Float、Whateverの値を表します。これらの値をデータベースに言語固有の文字列として書かれている、これは(... VB.Netを使用して)123.45のフロート値はドイツ語で"123,45"のような文字列として記述することができる意味MySQL:文字列を浮動小数点数/ドイツ語に変換する

私は平均が必要と同じグループにある浮動小数値の値: このような文字列をMySQL内のFLOATにキャストするにはどうすればよいですか? 単に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)のようなsomethigは99.333333、ない99を生じるはずです。

すべてのアイデア?

クリストフ

PS:私は、そのデータベース・レイアウトをしなかった...

答えて

7

あなたは、文字列関数の形式(X、D、ロケール)を行う必要があります

SELECT AVG(CONVERT(
    REPLACE(REPLACE(value, '.', ''), ',', '.'), 
    DECIMAL(10,2))) 
FROM `table` 
WHERE `group`=1 
+0

これは、状況によっては失敗する可能性があります。ドイツ語では、T1234.56の値に「1.234,56」と書かれています。上記の結果は '' 1.234.56 "という文字列になり、' 1'に変換されます。 –

+0

@ChristophMühlmann:私の編集した投稿を試してください – Marco

+0

あなたの編集したコードはうまくいくかもしれませんし、そうでないかもしれません:ポイントが小数点の場合はどうなりますか? データベースのレイアウトを少し変更することにしました。数値データ用の列(float、int、booleanは 'DECIMAL(30,10)' -columnに保存されます)と他のデータ(text、シリアル化されたデータ、バイナリデータなど)。 MySQLの数値列の値を直接計算することができます(AVG/MIN/MAX f.e.) –

関連する問題