MySQL将数字转换为字母表

时间:2013-07-04 05:13:42

标签: mysql

我的表中有一个自动增加的transactionID type=MEDIUMINT(9)。我还要向我的用户显示一个独特的4个字符(可以随着时间的推移而增长,但现在只有4个字符)按字母顺序恢复代码。从transactionID派生此字母代码的最佳方法是什么,最好直接从SELECT statement

谢谢。 :)

5 个答案:

答案 0 :(得分:1)

我只是在寻找类似的东西,我找到了一种使用CONV函数的方法。

CONV(9+your_number, 10, 36)

这会将1转换为A,将2转换为B,等等。

它的工作方式是添加9,然后转换为以36为底的基数,其中10是A,11是B等。

答案 1 :(得分:0)

您可以使用事务ID的值生成哈希。

像:

SELECT MD5(transactionID) FROM `yourtable`;

您可以use使用其他几种类似的功能。

答案 2 :(得分:0)

这主要取决于你想要使用的字母。

您可以使用TO_BASE64将其转换为base64编码的字符串,或者只是执行以下操作:

select REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(your_number, '0', 'A')
, '1', 'B')
, '2', 'C')
, '3', 'D')
, '4', 'E')
, '5', 'F')
, '6', 'G')
, '7', 'H')
, '8', 'I')
, '9', 'J')

如果你想要自定义字母。

如果你想要更短的东西,你可以采取稍微更难的方式:

使用9位十进制(最大999999999),转换为8个十六进制数字(0x3B9AC9FF),即4个字节。您可以做的是将您的数字除以4个二进制八位字节,将它们转换为字符,构造新字符串并将其提供给TO_BASE64()

select TO_BASE64(CONCAT(CHAR(FLOOR(your_number/(256*256*256))%256),CHAR(FLOOR(your_number/(256*256))%256),CHAR(FLOOR(your_number/256)%256),CHAR(your_number%256)))

注意,TO_BASE64()函数仅在MySQL 5.6中可用。

现在,对于旧版本的用户 - 我们不想亲手实施base64编码,不是吗?那么,让我们更简单一点:我们在这9个十进制数字中有30位,如果我们在CHAR(32)之后使用64个连续字符字母,那就是30/6 = 5个字符,这是空间,我们不这样做想用:

SELECT CONCAT(`enter code here`CHAR(FLOOR(your_number/(64*64*64*64))%64+33),CHAR(FLOOR(your_number/(64*64*64))%64+33),CHAR(FLOOR(your_number/(64*64))%64+33),CHAR(FLOOR(your_number/64)%64+64),CHAR(your_number%64+33))

答案 3 :(得分:0)

也许可以使用CASE WHEN() END;和存储过程

例如:

CREATE DEFINER = 'USERNAME'@'HOST' STORED PROCEDURE `ConvertNumberToAlphabetic`
BEGIN
SELECT 
(CASE
    WHEN (your_number = '1') THEN 'A'
    WHEN (your_number = '2') THEN 'B'
    WHEN (your_number = '3') THEN 'C'
    WHEN (your_number = '4') THEN 'D'
    WHEN (your_number = '5') THEN 'E'
    WHEN (your_number = '6') THEN 'F'
    WHEN (your_number = '7') THEN 'G'
    WHEN (your_number = '8') THEN 'H'
    WHEN (your_number = '9') THEN 'J'
    WHEN (your_number = '10') THEN 'K'
END) RedeemCode
FROM tblTransaction;
END

答案 4 :(得分:-1)

SELECT SUBSTRING(MD5(transactionId) FROM 1 FOR 4) AS RedemptionCode

这将创建一个4个字符(易于更改,如您所见)字符串,其中字符来自MD5命令(因此在a-z和0-9范围内)。