我有一个表用户,但我只显示了2列,我想要对name列的所有字符进行求和。
+----+-------+
| id | name |
+----+-------+
| 0 | user |
| 1 | admin |
| 3 | edit |
+----+-------+
例如,用户的ascii总和将是
总和(用户)= 117 + 115 + 101 + 114 = 447
我已经厌倦了这个
SELECT ASCII(Substr(name, 1,1)) + ASCII(Substr(name, 2, 1)) FROM user
但它只有2。
答案 0 :(得分:0)
你将不得不一次取一个角色来做总和。一种方法是使用while循环编写函数。如果您知道最长的字符串,则可以使用SELECT
执行此操作:
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。添加ASCII值并不是一个特别好的哈希函数(因为不同顺序中具有相同字符的字符串会产生相同的值)。至少,将每个ASCII值乘以位置会好一些。