和前端联调的时候,突然出现一个状况,新增数据的时候,一直报系统错误,写下此文,留以后反复温习。菜鸟程序员一名~

项目内容:新增产品信息

具体实现:1 获取基础信息,创建产品(调用接口传入的产品类型,如A作为编号的开头标识)【此时还未添加至数据库】

     2 填入其他信息(产品名称等)

     3 保存所有信息【此时添加至数据库】

在创建产品的时候需要返【产品编号】这个信息给前端,这个编号是在已有产品中取最大编号递增,已有的编号以产品类型编号字符为开头,如 A 第一个产品为A001,第二个产品A002......

之前老代码设计的时候没想过如果个数大于999了如何处置,所以我遇上了A999,新增一个产品后,没什么问题,但是再曾一个产品的时候,问题来了,之前的sql语句查出来的最大编号是A999,所以创建产品的时候是A1000,但是A1000已经存在了!

* 之前的sql:

SELECT max(product_no)
FROM product_info
WHERE product_type='A'

结果:A999

因为字符串比较是从左到右的,所以从第二个字符开始,9都是最大的,因此A999是最大的字符

所以我们要把数字那一块按照正常数字比较大小,而不是按着字符串比较

那么遇到两个问题:1 截取字串('A999'---截取---'999')

         2 转换成数字('999'---转换---999)

解决【问题一:截取字串处理】

SUBSTR(string,start_position,[length])  求子字符串,返回字符串

 a、substr("A123", 1);//返回:A123,截取所有字符;

 b、substr("A123", 2);//返回:123,截取从1开始之后所有字符;

 c、substr("A123", 2, 2);//返回:12,截取从1开始2个字符;

 d、substr("A123", 1, 100);//返回:A123,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回;

 e、substr("A123", -3);//返回:123,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变;

解决【问题二:转换成数字】

找了很多基本上都是说用 convert(int,字段名)或者 cast(字段名 as int) 函数对的,但是这样写完全错误!!!!!

终于找到了正确的写法:

a、SELECT CAST('123' AS SIGNED integer);
b、SELECT CONVERT('123',SIGNED);
c、SELECT '123'+0; // 嘻嘻,c 的写法有点粗鄙,但也还中用~

一直找不到正确的函数用法,所以用了c写法,今天细细回顾,再多加搜寻资料的时候解决了~

最终的sql语句:

SELECT product_no
FROM product_info
WHERE product_type='A'
ORDER BY CONVERT(SUBSTR(product_no,2), SIGNED) DESC LIMIT 1

结果:A1000

开熏!!!!

SQL语句:如何让字符串转化数字的更多相关文章

  1. Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)

    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B

  2. Sql语句模糊查询字符串的两种写法

    Sql语句模糊查询有两种写法,一种是在jdbcTemplate的查询方法参数里拼接字符串%,一种是在Sql语句里拼接%字符串. public class IsNameDaoImpl implement ...

  3. sql语句中截取字符串

    今天在开发过程中因为要用到合并单元格,在程序里实现了以后,查出来的数据太长,都把格式撑大了,后来想想可以在sql语句查询的时候就截取,就去网上找了一下,挺好用,就转了过来: 合并单元格: /// &l ...

  4. sql语句循环截取字符串

    测试环境 : mssql2016 express 需求 : 拆分字符串执行insert 思路 : 在循环中截取分隔符之间的字符串.起止点位置计算    起点从0开始startIndex,查找第一个分隔 ...

  5. sql语句的截取字符串下标是从1开始

    这里的指的sqliter数据库 substr函数 substr(date,1,10)

  6. python模拟SQL语句操作文件

    1.需求 在文本界面输入SQL语句,查询相应的数据,例如输入下面的语句 print(''' 支持大小写的SQL语句查询,大写或者小写都可以 1. select * from db1.emp 2. se ...

  7. 在EXCEL中使用SQL语句查询

    SQL语句在数据库使用中十分重要. 在EXCEL中可以不打开工作簿,就获取数据,对多工作簿操作很用,也很快. 对大量数据处理,比循环快很多,但是比词典方法还有点距离(可惜我还没有学会词典). 对数据库 ...

  8. 【呕心总结】python如何与mysql实现交互及常用sql语句

    9 月初,我对 python 爬虫 燃起兴趣,但爬取到的数据多通道实时同步读写用文件并不方便,于是开始用起mysql.这篇笔记,我将整理近一个月的实战中最常用到的 mysql 语句,同时也将涉及到如何 ...

  9. PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别

    PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别 在PL/SQL中在执行SQL语句时可以直接写SQL或者可以把一个SQL语句拼成一个字符串,如下: select * fr ...

随机推荐

  1. mui中confirm在苹果出现bug,confirm点击确定跳转页面再返回后,页面被遮罩盖住无法使用

    项目中使用confirm mui.confirm('您还未抽奖,现在去抽奖吗?', function (res) { if (res.index === 1) { window.location.hr ...

  2. spring事务的7种传播行为

    https://blog.csdn.net/weixin_39625809/article/details/80707695 一般用于并发,分布式锁.复杂业务情况

  3. 【NOIP2015普及组】推销员_详解

    题目 题目大意 阿明是一名推销员--螺丝街是一条直线,一端有入口,一共有 \(N(<100,000)\) 家住户,第 \(i\) 家住户到入口的距离为 \(S_i\) 米.由于同一栋房子里可以有 ...

  4. 转载redis持久化的几种方式

    redis持久化的几种方式 1.前言 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服 ...

  5. gitlab-runner部署

    Gitlab在线安装部署参考 一.    环境 系统 版本 备注 Centos 7_64 建议使用4GB RAM和4或8个CPU内核 二.    安装并配置必要的依赖项 a)      在centos ...

  6. linux文件 特殊权限的使用

    http://www.iqiyi.com/a_19rrh3tui5.html 1.说明 i属性不能修改 a只能追加在6以后 [root@xuegod63 ~]# chattr +i a.txt [ro ...

  7. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建复杂工具栏

    jQuery EasyUI 数据网格 - 创建复杂工具栏 数据网格(datagrid)的工具栏(toolbar)可以包含按钮及其他组件. 您可以通个一个已存在的 DIV 标签来简单地定义工具栏布局,该 ...

  8. UML作业第二次:类在类图中的表示

    一.学习小结: 类之间的关系通过下面的符号定义 : 使用.. 来代替 -- 可以得到点 线. @startuml Class01 <|-- Class02 Class03 *-- Class04 ...

  9. python运用PIL制作GIF

    与一.安装Pillow 安装地址:https://pypi.org/project/Pillow/#files 二.准备好图片,并从0开始命名,如下图: (ps:记得存图位置与新建的py文件在同一存放 ...

  10. Maven 插件打包部署项目

    clean install -Dmaven.test.skip=true:打包工具 clean package