需求:从目前的 test_a03order 表里面提取出来产品规格,押金的数据

一.首先添加表字段
我们在表里面添加这两个字段 命名为product_size,deposit 后期进行更新这两个字段内容就可以了

 ALTER TABLE test_a03order ADD product_size VARCHAR(255) AFTER productname;#在productname之后插入规格字段
ALTER TABLE test_a03order ADD deposit VARCHAR(255) AFTER price;#在price之后插入押金带元字 仅此varchar 数据类型

插入要生成的新字段

插入字段成功

二、分析需求属性

1、发现产品规格,押金数据是存在于productname中的因此我们需要先看数据表内有多少个product 观察所有产品的命名规律

 1 SELECT productname FROM test_a03order GROUP BY productname

查看几个产品

结果在这个表里有4个product 分别为 "心灵鸡汤(押瓶1000元)10000ml*24瓶/箱”,”横刀夺爱丸(押瓶888元)15粒/盒","脑残片(押瓶99元)15片/盒","鬼迷心窍汤(押瓶888元)10000ml*12瓶/箱","鬼迷心窍汤(押瓶888元)10000ml*12瓶/箱",通过观察productname都包含一个"押"字,product_size是在字符串的最后一个字,deposit位于中间的括号里且在"瓶"字和"元"中间 因此可以使用 LEFT() RIGHT() CHAR_LENGTH()函数进行处理 。

2、获取product_size

 SELECT productname,RIGHT(productname,1) AS product_size
FROM test_a03order
WHERE productname LIKE "%押%"

获取product_size

3、获取deposit

# 我们一步一步来,先取出"瓶"字左面的左边字段(包含瓶这个字符串本身),再取出"元"字左面的左边字段(包含元这个字符串本身)

 SELECT productname,
LEFT(productname,INSTR(productname,"瓶"))AS deposit_left,
LEFT(productname,INSTR(productname,"元")) AS deposit_leftall
FROM test_a03order
WHERE productname LIKE "%押%"

获取deposit押金第一步

这时候发现deposit_leftall 包含deposit_left字符串的全部,并且差异就在押金数值,且位于deposit_leftall 字段的右面部分,用deposit_leftall减去deposit_left不就是押金呢 但字符串类型不能加减呢,因此我们需要先计算上面deposit_left,deposit_leftall的长度 用它们的长度之差 作为right()函数的参数 截取 deposit_leftall

我们为什么用char_length()而不用length()函数截取字符长度就在于length()默认一个汉字长度为3,CHAR_LENGTH()不论中英文都默认长度为1

所以现在重新写下SQL

 SELECT productname,
LEFT(productname,INSTR(productname,"瓶")) AS deposit_left,
LEFT(productname,INSTR(productname,"元")) AS deposit_leftall,
CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶"))) AS deposit_left_length,
CHAR_LENGTH(LEFT(productname,INSTR(productname,"元"))) AS deposit_leftall_length,
RIGHT(LEFT(productname,INSTR(productname,"元")),CHAR_LENGTH(LEFT(productname,INSTR(productname,"元")))-CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶")))) AS deposit
#上面right()这么长代码实质上就是right(deposit_leftall,deposit_leftall_length-deposit_left_length)
FROM test_a03order
WHERE productname LIKE "%押%"

获取deposit第二步

重新整理以下代码把 product_size 和deposit都省去中间过程

 SELECT productname,
RIGHT(productname,1) AS product_size,
RIGHT(LEFT(productname,INSTR(productname,"元")),CHAR_LENGTH(LEFT(productname,INSTR(productname,"元")))-CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶")))) AS deposit
FROM test_a03order
WHERE productname LIKE "%押%"

成功获取deposit

 三、更新数据表插入的两个字段 

更新字段内容

 UPDATE test_a03order SET product_size=RIGHT(productname,1) WHERE productname LIKE "%押%";
UPDATE test_a03order SET `deposit`=RIGHT(LEFT(productname,INSTR(productname,"元")),CHAR_LENGTH(LEFT(productname,INSTR(productname,"元")))-CHAR_LENGTH(LEFT(productname,INSTR(productname,"瓶")))) WHERE productname LIKE "%押%"

更新数据表新插入的两个字段

更新成功 执行查询查看效果

 SELECT * FROM test_a03order

查看更新效果

四、更新成功

MySQL文本处理函数2_20160921的更多相关文章

  1. MySQL【文本处理函数】的使用方法

    文本处理函数 名称 调用示例 示例结果 描述 LEFT LEFT('abc123', 3) abc 返回从左边取指定长度的子串 RIGHT RIGHT('abc123', 3) 123 返回从右边取指 ...

  2. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  3. MySQL 存储过程和函数

    概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...

  4. mysql内置函数大全

    mysql 字符串函数用法集合 ASCII(str)返回字符串str的最左面字符的ASCII代码值. mysql> select ascii('d'); +------------+ | asc ...

  5. mysql中now()函数的使用,还有oracle的sysdate,可能埋下的坑

    mysql中now()函数的使用,还有oracle的sysdate 在需求中如果系统中药添加当前操作的时间那么很简单的一个操作在写sql的时候直接在这个字段对应的位置写上now()函数就可以了,这样就 ...

  6. MySQL字符串连接函数

    一.CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. select concat(s_id, "--", ...

  7. mysql中find_in_set()函数的使用

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...

  8. MySQL中concat函数(连接字符串)

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  9. MySQL:日期函数、时间函数总结

    MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...

随机推荐

  1. 使用Nginx的proxy_cache缓存功能取代Squid

    Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...

  2. msgsnd的一个小问题

    今天写了一个System V消息队列的小样例.定义了一个例如以下的结构体: #define MSG_SIZE 8192 struct request { long mtype; int client_ ...

  3. 使用python处理实验数据-yechen_pro_20171231

    整体思路 1.观察文档结构: - 工况之一 - 流量一28 - 测点位置=0 -测点纵断面深度-1 -该点数据Speedxxxxxxxx.txt -测点纵断面深度-2 -测点纵断面深度-3 -... ...

  4. Chrome自带恐龙小游戏的源码研究(二)

    在上一篇<Chrome自带恐龙小游戏的源码研究(一)>中实现了地面的绘制和运动,这一篇主要研究云朵的绘制. 云朵的绘制通过Cloud构造函数完成.Cloud实现代码如下: Cloud.co ...

  5. 搭建私有Nuget仓库

    使用Nexus搭建私有Nuget仓库 https://www.cnblogs.com/Erik_Xu/p/9211471.html 前言 Nuget是ASP .NET Gallery的一员,是免费.开 ...

  6. git for windows 无法结束node进程(windows下杀进程)

    问题 windows 系统下,如果用CMD命令行启动node服务,Ctrl + C 即可结束命令 git bash 用起来比命令行方便,但是Ctrl + C 并不会结束node服务,再次启动会报如下错 ...

  7. 11 redis之rdb快照持久化

    一:Redis持久化配置 Redis的持久化有2种方式[快照,是日志] 二:Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 // 如果3 ...

  8. 【百度之星复赛】T5 Valley Numer

    Valley Numer Problem Description 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Number,像山谷一样的数字. 当一个数字,从左到右依次看过 ...

  9. wepy 实现 用户名登录与短信验证码登录

    wepy 实现 用户名登录与短信验证码登录

  10. apache 301重定向到带www的二级域名

    Options +FollowSymlinks RewriteEngine on rewritecond %{http_host} ^nlike.cn [nc] rewriterule ^(.*)$ ...