zoukankan      html  css  js  c++  java
  • MySQL中大数字加减,不产生千位符和科学计数

    mysql数字加减科学计数法

    这两天因为需求,需要获取一张表的流水号。规则是这样的。当前日期+8位流水号。比如:2015062400000001,2015062400000002,2015062400000003....

    因为考虑到并发问题,所以解决的方案是:在MySQL写存储过程,逻辑如下:

    1、查询表今天流水号的最大主键值:如:

    [sql] view plain copy
    1. SELECT MAX(a.ORDER_ID) from Zhang_Test a where 1=1 and a.order_id LIKE CONCAT('%',nowDate,'%')  

    其中nowData 是:SELECT date_format(NOW(),'%Y%m%d') from dual   即当前日期,没有任何分隔符;如:20150624

    2、判断是否有值,如果有+1。没有则为nowData + 00000001  如:2015062400000001;设置为今天第一个流水号。

    3、向表插入数据,这样就把这个流水号占用了。如果有其他程序访问这个存储过程,那么就会在当前的流水号上再加1.

    4、返回当前流水号

    因为这些都是在存储过程中执行,所以就能有效保证获取的流水号是唯一的。这样就不会造成主键冲突。只是保存数据时,由新增变为了更新,因为获取的流水号在存储过程中就已经插入了一条数据,即表中已经有了这条数据。


    遇见的问题:

    再次过程中遇见的问题:

    获取流水号时,如果查询出流水号那么我们在今天最大流水号+1,问题如下:

    [sql] view plain copy
    1. BEGIN  
    2.     #Routine body goes here...  
    3.     #需求获取序列号,格式为:8位日期 + 8位序列号  如2014082100000001  
    4.     #查询时根据当前日期值【如:20140821】  
    5.   
    6.     # 定义最大序号值  
    7.     DECLARE maxSeq VARCHAR(20);  
    8.     # 当前日期值  
    9.     DECLARE nowDate VARCHAR(20);  
    10.       
    11.     # 获取当前日期值  
    12.     set nowDate = (SELECT date_format(NOW(),'%Y%m%d'from dual);  
    13.     # 获取最大序列值  
    14.     SET maxSeq = (SELECT MAX(a.ORDER_ID) from Zhang_Test a where 1=1 and a.order_id LIKE CONCAT('%',nowDate,'%') ); #'%20150623%'  
    15.     #SET maxSeq = 2015062399999888;  
    16.     #SET maxSeq = 2015062399999888+1;       # 99999888  
    17.     SET maxSeq = maxSeq+1;  
    18.     INSERT INTO Zhang_Test (order_id) VALUES(maxSeq);  
    19.     # 获取序列信息  
    20.     SELECT maxSeq ;  
    21.   
    22. END  

    结果如下:变为了科学计数。这肯定不是我们想要的。


    如果:

    [sql] view plain copy
    1. SET maxSeq = maxSeq+1; 变为==》    SET maxSeq = FORMAT(maxSeq+1,0);     

    那么结果为:



    显然以上都不是我们所需要的。


    所以我们应当这样:  

    [sql] view plain copy
    1. SET maxSeq = maxSeq+1; 变为==》    SET maxSeq = CONVERT(maxSeq,SIGNED)+1;  或者为: SET maxSeq = CAST(maxSeq as SIGNED)+1;  
    结果为:


    这便是我们所需要的结果了。

  • 相关阅读:
    # 漏洞挖掘技巧清单 #
    CVE-2020-0796——SMBV3客户端/服务端远程代码执行漏洞(远程代码执行+权限提升)
    SSH公钥详细介绍及拓展
    滑动窗口(数据结构)
    反素数解析
    树状数组的基本操作
    Rochambeau POJ
    一般图最大匹配
    2020牛客暑期多校训练营(第一场)H Minimum-cost Flow
    A Bug's Life POJ
  • 原文地址:https://www.cnblogs.com/baobeiqi-e/p/9884750.html
Copyright © 2011-2022 走看看