mysql数字加减科学计数法

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

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

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

  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,问题如下:

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

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

如果:

  1. SET maxSeq = maxSeq+1; 变为==》    SET maxSeq = FORMAT(maxSeq+1,0);

那么结果为:

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

所以我们应当这样:

  1. SET maxSeq = maxSeq+1; 变为==》    SET maxSeq = CONVERT(maxSeq,SIGNED)+1;  或者为: SET maxSeq = CAST(maxSeq as SIGNED)+1;

结果为:

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

MySQL中大数字加减,不产生千位符和科学计数的更多相关文章

  1. 购物车数字加减按钮HTML+CSS+JS(有需要嫌麻烦的小伙伴拿走不谢)

    之前在写详情页的时候,如下图 因为自己嫌麻烦,就去看其他网站是怎么写的,想直接拿来用,后来看来看去觉得写得很麻烦,于是最后还是决定自己写,附上HTML+CSS+JS代码,一条龙一站式贴心服务2333 ...

  2. 小巧实用的数字加减插件(jquery插件)

    2015-12-04 近期项目需要,我将插件更新了,增加了两个参数,一个参数控制文本框是否支持输入,另一个参数则是新增了一个回调函数,返回文本框内的值.另外对代码局部重构了,优化了一下封装,需要的朋友 ...

  3. jQuery数字加减插件

    jQuery数字加减插件 我们在网上购物提交订单时,在网页上一般会有一个选择数量的控件,要求买家选择购买商品的件数,开发者会把该控件做成可以通过点击实现加减等微调操作,当然也可以直接输入数字件数.本文 ...

  4. JS生成数字加减乘法验证码

    给大家分享一个简单的js验证码生成代码 PS:该代码依赖Jquery1.4版本以上 传入元素 如productionVerificationCode(#\(("a")) 反回验证码 ...

  5. 纯CSS样式实现数字加减按钮的最佳方案

    前言: 对于数字加减按钮的实现,以前用过不少方案,诸如: 1.使用背景图片——这种效果比较好,缺点是样式控制有点复杂了,还需要使用图片: 2.直接使用“+”“-”——这种方法简单粗暴,最容易实现,缺点 ...

  6. 对Textbox的值转换为带千位符和小数的Decimal字符串

    以下Function可以用于textbox的KeyUp事件: 2014-06-06 发现旧版IE不支持selectionStart还有字符串的"[]"索引获取值, 已经修复这个bu ...

  7. js实现千位符分隔

    前几天面试做保险项目的公司,被问到了一道实现千位符分割方法的题,乍一看挺简单,但做起来最后却没给出来一个合适的解决方法.回来自己琢磨了一个还行的答案. var num = 3899000001, ar ...

  8. js千位符 | js 千位分隔符 | js 金额格式化

    js 千位分隔符 千位分隔符,其实就是数字中的逗号.依西方的习惯,人们在数字中加进一个符号,以免因数字位数太多而难以看出它的值.所以人们在数字中,每隔三位数加进一个逗号,也就是千位分隔符,以便更加容易 ...

  9. wpf 千位符 格式化字符串

    StringFormat={}{0:N2}}//格式话字符串,增加千位符,2保留小数点后2位 StringFormat={}{0:N0}}//格式话字符串,增加千位符,无小数点后

随机推荐

  1. class文件直接修改_反编译修改class文件变量

    今天笔者同事遇到一个问题,客户同事的数据库连接信息直接写在代码中,连接的密码改了,但是又没有源代码,所以只能直接修改Java class文件. 记录一下修改步骤: 1.下载JClassLib_wind ...

  2. springboot数据库操作及事物管理操作例子

    一.配置文件 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  3. Spark 基于物品的协同过滤算法实现

    J由于 Spark MLlib 中协同过滤算法只提供了基于模型的协同过滤算法,在网上也没有找到有很好的实现,所以尝试自己实现基于物品的协同过滤算法(使用余弦相似度距离) 算法介绍 基于物品的协同过滤算 ...

  4. ng-options 如何实现其中一项option禁选

    <select class="form-control" ng-model="functionPaymentMethod" ng-options=&quo ...

  5. 1.SpringMVC设计理念与DispatcherServlet

    SpringMVC作为Struts2之后异军突起的一个表现层框架,正越来越流行,相信javaee的开发者们就算没使用过SpringMVC,也应该对其略有耳闻.我试图通过对SpringMVC的设计思想和 ...

  6. 8.初识Lock与AbstractQueuedSynchronizer(AQS)

    1. concurrent包的结构层次 在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们对并发编程的掌握更加透彻也会大大提升我们队并发编程技术的 ...

  7. 三十 Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中

    1.爬虫文件 dispatcher.connect()信号分发器,第一个参数信号触发函数,第二个参数是触发信号,signals.spider_closed是爬虫结束信号 # -*- coding: u ...

  8. filter-mapping中的dispatcher使用

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGAAAAEJCAIAAABUr8bLAAAgAElEQVR4nO3dX2/bVoL3cb4h+WYnwN

  9. Python之路,Day8 - 面向对象编程进阶

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...

  10. 【Error】local variable 'xxx' referenced before assignment

    此种错误涉及到变量的作用域,即全局变量和局部变量的操作. 总结如下: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局 ...