mysql-如何创建自动递增的字符串?

前端之家收集整理的这篇文章主要介绍了mysql-如何创建自动递增的字符串? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我面临用01、02,…,10、12递增字符串的问题

>我有一个SQL查询,该查询给了我AAAA06,这在我的数据库中最大.
>现在,我有一个要求,每当用户调用此命令时,它将使用最大编号检查数据库.当前为AAAA06(当前为最大值),应返回或打印AAAA07.
>同样,当最大值为AAAA09时,则应增加为AAAA10,依此类推
>作为一种语言,我正在使用Java,但是我想知道我可以通过自己的SQL查询来实现此目的还是必须编写Java代码来实现此目的?

我正在使用的查询就像

  1. select max(code) from mt_users where maincode='AAAA'

叫最大否是我做的.我只想增加或连接适合获得期望输出的任何内容.

它返回我AAAA06,因为这是当前的最大值.

重要事项

>最初为AAAA时,应显示AAAA01
>如果是AAAA09,则应显示AAAA10
>当它是AAAA99时将显示AAAA100

注意:当前我的最大身份为AAAA06,但是对于新用户而言,将来可能是AAAE,因此我必须以AAAE01开头.

最佳答案
简短答案-使用此查询

  1. SELECT id AS PrevID,CONCAT(
  2. SUBSTRING(id,1,4),IF(CAST(SUBSTRING(id,5) AS UNSIGNED) <= 9,'0',''),CAST(SUBSTRING(id,5) AS UNSIGNED) + 1
  3. ) AS NextID
  4. FROM (
  5. -- since you allow strings such as AAAA20 and AAAA100 you can no longer use MAX
  6. SELECT id
  7. FROM t
  8. ORDER BY SUBSTRING(id,4) DESC,5) AS UNSIGNED) DESC
  9. LIMIT 1
  10. ) x

结果:

  1. | PrevID | NextID |
  2. | AAAA100 | AAAA101 |
  3. | AAAA21 | AAAA22 |
  4. | AAAA06 | AAAA07 |

只是为了好玩,我写了这个存储过程,它生成的数字看起来像AAAA00 AAAA99 AAAB00等:

  1. CREATE FUNCTION NextID(PrevID VARCHAR(6))
  2. RETURNS VARCHAR(6)
  3. BEGIN
  4. DECLARE s VARCHAR(4);
  5. DECLARE i INT;
  6. DECLARE j INT;
  7. SET s = LEFT(PrevID,4);
  8. SET s = REPLACE(s,'A','0');
  9. SET s = REPLACE(s,'B','1');
  10. SET s = REPLACE(s,'C','2');
  11. SET s = REPLACE(s,'D','3');
  12. SET s = REPLACE(s,'E','4');
  13. SET s = REPLACE(s,'F','5');
  14. SET s = REPLACE(s,'G','6');
  15. SET s = REPLACE(s,'H','7');
  16. SET s = REPLACE(s,'I','8');
  17. SET s = REPLACE(s,'J','9');
  18. SET s = REPLACE(s,'K','A');
  19. SET s = REPLACE(s,'L','B');
  20. SET s = REPLACE(s,'M','C');
  21. SET s = REPLACE(s,'N','D');
  22. SET s = REPLACE(s,'O','E');
  23. SET s = REPLACE(s,'P','F');
  24. SET s = REPLACE(s,'Q','G');
  25. SET s = REPLACE(s,'R','H');
  26. SET s = REPLACE(s,'S','I');
  27. SET s = REPLACE(s,'T','J');
  28. SET s = REPLACE(s,'U','K');
  29. SET s = REPLACE(s,'V','L');
  30. SET s = REPLACE(s,'W','M');
  31. SET s = REPLACE(s,'X','N');
  32. SET s = REPLACE(s,'Y','O');
  33. SET s = REPLACE(s,'Z','P');
  34. SET i = RIGHT(PrevID,2);
  35. SET j = CONV(s,26,10);
  36. SET i = i + 1;
  37. IF i > 99 THEN
  38. SET i = 0;
  39. SET j = j + 1;
  40. END IF;
  41. SET s = CONV(j,10,26);
  42. SET s = REPLACE(s,'Z');
  43. SET s = REPLACE(s,'Y');
  44. SET s = REPLACE(s,'X');
  45. SET s = REPLACE(s,'W');
  46. SET s = REPLACE(s,'V');
  47. SET s = REPLACE(s,'U');
  48. SET s = REPLACE(s,'T');
  49. SET s = REPLACE(s,'S');
  50. SET s = REPLACE(s,'R');
  51. SET s = REPLACE(s,'Q');
  52. SET s = REPLACE(s,'P');
  53. SET s = REPLACE(s,'9','8','7','6','5','4','3','2','1','A');
  54. RETURN CONCAT(LPAD(s,4,'A'),LPAD(i,2,'0'));
  55. END
  56. SELECT NextID('AAAA01') -- AAAA02
  57. SELECT NextID('AAAA99') -- AAAB00
  58. SELECT NextID('AAAB99') -- AAAC00
  59. SELECT NextID('AAAZ99') -- AABA00

猜你在找的MySQL相关文章