SQL语句:如何让字符串转化数字
和前端联调的时候,突然出现一个状况,新增数据的时候,一直报系统错误,写下此文,留以后反复温习。菜鸟程序员一名~
项目内容:新增产品信息
具体实现: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语句:如何让字符串转化数字的更多相关文章
- Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B
- Sql语句模糊查询字符串的两种写法
Sql语句模糊查询有两种写法,一种是在jdbcTemplate的查询方法参数里拼接字符串%,一种是在Sql语句里拼接%字符串. public class IsNameDaoImpl implement ...
- sql语句中截取字符串
今天在开发过程中因为要用到合并单元格,在程序里实现了以后,查出来的数据太长,都把格式撑大了,后来想想可以在sql语句查询的时候就截取,就去网上找了一下,挺好用,就转了过来: 合并单元格: /// &l ...
- sql语句循环截取字符串
测试环境 : mssql2016 express 需求 : 拆分字符串执行insert 思路 : 在循环中截取分隔符之间的字符串.起止点位置计算 起点从0开始startIndex,查找第一个分隔 ...
- sql语句的截取字符串下标是从1开始
这里的指的sqliter数据库 substr函数 substr(date,1,10)
- python模拟SQL语句操作文件
1.需求 在文本界面输入SQL语句,查询相应的数据,例如输入下面的语句 print(''' 支持大小写的SQL语句查询,大写或者小写都可以 1. select * from db1.emp 2. se ...
- 在EXCEL中使用SQL语句查询
SQL语句在数据库使用中十分重要. 在EXCEL中可以不打开工作簿,就获取数据,对多工作簿操作很用,也很快. 对大量数据处理,比循环快很多,但是比词典方法还有点距离(可惜我还没有学会词典). 对数据库 ...
- 【呕心总结】python如何与mysql实现交互及常用sql语句
9 月初,我对 python 爬虫 燃起兴趣,但爬取到的数据多通道实时同步读写用文件并不方便,于是开始用起mysql.这篇笔记,我将整理近一个月的实战中最常用到的 mysql 语句,同时也将涉及到如何 ...
- PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别
PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别 在PL/SQL中在执行SQL语句时可以直接写SQL或者可以把一个SQL语句拼成一个字符串,如下: select * fr ...
随机推荐
- 关于win10环境下Anaconda python,用pip安装包及升级时SSL报错的问题
刚开始查完以为是网的问题,但是添加信任值\镜像网站\手动下载安装都失败了. 检查后发现python中无SSL模块,检查Anaconda后发现是少加了环境变量Anaconda3\Library\bin, ...
- 在Heroku上免费部署ASP.NET Core(使用Docker和CircleCI)
创建 ASP.NET Core应用 使用命令行即可创建一个模板项目 dotnet new webapi 完整代码 https://github.com/Ibro/AspNetCoreHerokuDoc ...
- 代码生成器——实现生成pojo,sql,mapper接口
代码生成器(记录一次兴趣代码,多多指教.转载请标明作者) 在我们开始实现代码生成器之前我们先来对代码生成器有一个简单的了解. 1.什么是代码生成器? 故名思义,也就是生成代码的一个程序.那它是一个什么 ...
- 2.1 maven配置多镜像地址
背景: 自己在平时写项目用的是阿里的镜像地址,而在开发公司的项目是用的是公司提供的镜像地址,这就导致了每次使用的时候 都需要来回的修改maven的settings.xml文件,这样很容易出错,而且还浪 ...
- python多版本共存
根据环境变量的顺序调用python,pip等程序 将python.exe修改为python2.exe(或python3.exe)后可以通过不同的名字调用不同版本的python 注意修改Anaconda ...
- .Net Core文件上传
https://www.cnblogs.com/viter/p/10074766.html 1.内置了很多种绑定模型 缺少了一个FromFileAttribute 绑定模型 需要自己实现一个 pub ...
- JVM垃圾回收(三)- GC算法:基础
GC算法:基础 在介绍GC算法在实际场景中的实现之前,我们先定义一些必要的术语,以及GC算法的基本准则.具体的细节会因收集器的不同而稍有区别,但是基本上来说,所有的收集器会关注以下两个方面: 找出所有 ...
- Write Sling Servlet using a resource type and selector
@SlingServlet( resourceTypes = "geometrixx/components/homepage", selectors = "data&qu ...
- mpvue开发项目总结(从0到上线)
1.简言 为期一个半月的小程序开发,其中夹杂其他项目的功能迭代,跌跌撞撞的将项目完成了,今天中秋节放假前一天,以此来记录下此次打怪升级的心得与分享其中遇到花费时间的问题. 因为此次开发的是一个类电商项 ...
- Django框架简介-路由系统
2.2 路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是 ...