【问题标题】:Convert/encode string to numbers将字符串转换/编码为数字
【发布时间】:2014-07-06 20:36:27
【问题描述】:

我正在四处寻找将字符串编码/转换/转换为查询中的数字。与ASCII() 类似,但它只将最左边的字符返回到其相关代码。这个主题有什么可用的功能或方法吗? -实际上是可解码的

例如:

METHOD("test-string") # Outputs: 25478596325417

【问题讨论】:

  • 请举例说明您正在尝试做什么以及您想要完成什么。您是否正在寻找无损(可逆)编码?您在寻找特定长度的数字吗?您是否要转换一组特定的值?你想对转换后的数字做什么?
  • @GordonLinoff 我想将一组连续的字符 - 实际上是字符串 - 转换为我以后可以解码的数字。很可能是他们的 ASCII 码。添加示例
  • @user1929959 我以前见过。它不适合我的情况。

标签: mysql sql


【解决方案1】:

这适用于最长 8 个字符的字符串。

编码:

SELECT CONV(HEX(string), 16, 10);

解码:

SELECT UNHEX(CONV(number, 10, 16));

MySQL 支持长达 64 位的整数,并且此方法使用每个字符 8 位。因此,使用这种方法,您最多可以在一个整数中存储 64 / 8 = 8 个字符。

【讨论】:

  • 这个限制从何而来?
  • 我在回答中添加了解释。
【解决方案2】:

如果十六进制对您的应用程序来说足够好,那么函数hex() 可以满足您的需求。例如,您可以尝试:

select hex('abc'), hex('abcd')

这将适用于任意字符串。如果这不起作用,那么也许有一种方法可以将十六进制表示转换为适当的表示。

顺便说一句,unhex() 会返回原始字符串。

【讨论】:

  • 但 HEX 可能包含 A 到 F 数字。 我只需要整数!
  • @revo 您的字符串的最大长度是多少?
  • hmmmm 也许是 20,但这是一个猜测。
  • @revo 查看INTEGER 和DECIMAL 数据类型的范围。你不想转换成字符串吗?
  • 对不起,我想我让你误解了一些事情。我的意思是“整数”的数值。
【解决方案3】:

你可以使用

 COMPRESS('ABC) 

获取不是字符串的二进制字符串。它可以压缩任意大小。但目前尚不清楚您将如何处理该号码 - 或者您需要如何存储它。

【讨论】:

  • COMPRESS 输出不仅仅是数值。我需要转换为数字,并有能力从这些数字中解码主字符串。看别人回答。谢谢
【解决方案4】:

试试这个。

SELECT CAST(HEX(your_string) AS DECIMAL);

我承认,我没有测试它,但它应该可以工作。

编辑:

其他一些数据库(例如 Oracle、DB2、PostgreSQL)有它的函数 TRANSLATE()。不幸的是 MySQL 不支持它。据我所知,目前在 MySQL 中不存在此功能的替代品。所以使用嵌套的 REPLACE() 可能是目前唯一的选择。

【讨论】:

  • @pdw CAST(HEX("mmm") AS DECIMAL) 输出 6。那么如何将6 解码为mmm?
  • 它有它自己的限制 :( 参见我上面的编辑。嵌套 REPLACE 是支持任意长度字符串的唯一方法。
猜你喜欢
  • 2015-03-15
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多