我的列名为:
Ernest Hemingway
Jackson Pollock
我想将它们转换为数字并将它们存储在INT字段中。也许得到字母表中的每个字母的位置或类似的东西,产生一个数字:
23764283456
23984623746
有什么功能可以做这样的事吗?我不介意INT的长度,或者结果是一个或多个数字。重要的是每次我将函数应用于名称时,结果都是一样的。
谢谢!
答案 0 :(得分:2)
试试这个:
crc32('Ernest Hemingway');
将始终为您提供2479642411
答案 1 :(得分:1)
正如@Gordon_Linoff在评论中所说,大数字不能存储在int
类型的字段中
但我将向您展示如何将字符串转换为字符的ascii
您可以使用HEX
SELECT HEX('test')
+-------------+
| HEX('test') |
+-------------+
| 74657374 |
+-------------+
答案 2 :(得分:1)
这是一个单向哈希,但有一个重要的问题:整数应该可以在平台上表示。
PHP代码,假设需要32位兼容性:
$hash = sha1('Ernest Hemingway');
// last 6 characters, represent 3 bytes
$hash = substr($hash, -6);
$result = hexdec($hash); // integer: 1331016
请记住,这具有非常低的熵:2 ^ 24 = 16777216种可能性
4个字节太大,因为有符号/无符号整数差异会导致某些输入浮动,并且浮点数实际上不能被转换为具有完美确定性的整数。
答案 3 :(得分:1)
SELECT字段,CONVERT(SUBSTRING_INDEX(字段,' - ', - 1),UNSIGNED INTEGER)AS num 从表 ORDER BY num;