收藏本页 | 设为主页 | RSS
LOGO

我就上乐乐吧

之前相关短址文章也有提及,进制转换的问题,当然那些都是后端编程语言来进行,比如Java,PHP等,而这一次呢,我们要直接利用MySQL来进行相关转换。

您当前的位置:首页 » 技术杂萃
全站公告
重要提示!

本站收集各类美图,以无LOGO原汁原味图为主!欢迎大家交流。
怕失联,请认准如下地址:
微博:传送门
土豆:传送门
电报:传送门
微信:superimagelove
花瓣:传送门
Q群1:231151757
Q群2:583138281
文件解压密码:593668.com
热心赞助

站内搜索
 
相关文章
热门文章
热搜词组
文章归档
友情链接
MySQL数字进制转换

发布日期:2019-10-11  关键词: MySQL

之前相关短址文章也有提及,进制转换的问题,当然那些都是后端编程语言来进行,比如Java,PHP等,而这一次呢,我们要直接利用MySQL来进行相关转换。

网上搜索了相关资料,发现MySQL有一个进制转换的函数。

CONV(num,from_base,to_base)

num 要转换的数字,from_base 现有进制,to_base 转换后的进制

可以将一个数字从一个进制转换为另一个进制。转换成功后,函数返回数字的字符串表示形式,当入参数字为NULL时,返回值将为NULL。这里要强调下,最小进制为2,最大进制为36,如果要转换的数字为负数,则该数字被视为带符号数。否则,它被视为无符号数。比如执行如下代码:

SELECT CONV(593668,10,2),CONV(593668,10,16),CONV(593668,10,36),CONV(-593668,10,36)

执行结果如下:

MySQL数字进制转换,MySQL,技术杂萃

该函数好是好,不过短地址用的是62进制,它根本就不支持啊。这个就得另外来想办法来实现了。

还是网上去查了下,发现并没有现存的好办法,看来真的得自己来想了。根据进制转换的原理,编写好如下的SQL:

SELECT
  CONCAT(
    SUBSTR(
      '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
      FLOOR(593668 / POW(62,3)) % 62+1,
      1
    ),
    SUBSTR(
      '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
      FLOOR(593668 / POW(62,2)) % 62+1,
      1
    ),
    SUBSTR(
      '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
      FLOOR(593668 / POW(62,1)) % 62+1,
      1
    ),
    SUBSTR(
      '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
      FLOOR(593668 / POW(62,0)) % 62+1,
      1
    )
  ) AS tw

显示结果完全正确[2uri],这里仅是判断四位,如果还有更多的位数,请直接调整相应代码即可。
猜您喜欢:
Q群: 231151757微信:superimagelove 官网:www.593668.com