2016-09-04 6 views
1

私はテーブルのユーザーがいるが、私は2列だけを表示しているが、名前の列のすべての文字を合計したい。ユーザの例アスキー合計列Mysqlのすべての文字のASCII合計

+----+-------+ 
| id | name | 
+----+-------+ 
| 0 | user | 
| 1 | admin | 
| 3 | edit | 
+----+-------+ 

和(ユーザ)= + 114 117 + 115 + 101 = 447

あろう私はこの

SELECT ASCII(Substr(name, 1,1)) + ASCII(Substr(name, 2, 1)) FROM user 

疲れ有するが、それはわずか2を合計

答えて

0

合計を実行するには、一度に1文字をフェッチする必要があります。 1つの方法は、whileループで関数を書くことです。

SELECT name, SUM(ASCII(SUBSTR(name, n, 1))) 
FROM user u JOIN 
    (SELECT 1 as n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL 
     SELECT 4 UNION ALL SELECT 5 -- sufficient for your examples 
    ) n 
    ON LENGTH(name) <= n.n 
GROUP BY name; 

あなたの目標は容易に比較することができるものや、固定長として文字列を有効にする場合、あなたはMySQLでencryption functionsを検討するかもしれない:あなたが最も長い文字列を知っていれば、SELECTでこれを行うことができます。 ASCII値を加算するのは特に良いハッシュ関数ではありません(異なる次数の同じ文字列が同じ値を生成するため)。最低でも、各ASCII値にその位置を掛けていくと少し良いです。

+0

ありがとうございます。私は少し新しいですが、私はプロシージャとしてそれを保存する必要があります。あなたが偉大になるそれぞれのasciiを乗算すると言えばそれは良いでしょう –

関連する問題