需求:从目前的 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

查看更新效果

四、更新成功

最新文章

  1. mysql的查询、子查询及连接查询
  2. 百度编辑器UEditor常用设置函数大全
  3. 设置Hyper V
  4. NUBWO/狼博旺 NO-3000台式电脑耳机头戴式游戏电竞语音耳麦带话筒
  5. Backbone源码解析(四):View(视图)模块
  6. 【原创】14. MYSQL++之SSQLS(原理解析)
  7. 二维码(支持arc,苹果自带扫描,zbar扫描,二维码生成)
  8. hadoop笔记之Hive的数据类型
  9. skin++ 终极破解之法
  10. Sharepoint 2013 左右"SPChange"一个简短的引论
  11. java线程控制方法
  12. Redis中的数据对象
  13. Maven项目不打包*.hbm.xml文件
  14. Python内置函数(59)——open
  15. python django 的环境搭建(centos)
  16. 电脑用U盘启动
  17. 马尔科夫随机场模型(MRF-Markov Random Field)
  18. 浅谈常用的设计模式(new)
  19. Scala-元组操作
  20. 效能分析——词频统计的java实现方法的第一次改进

热门文章

  1. U盘EFI分区删不掉怎么办
  2. C语言日期计算器
  3. C++成员不通过对象调用的直接调用写法
  4. HDU 5056 Boring count(数学)
  5. JVM中垃圾收集选项
  6. Mysql 5.7.18 利用 MySQL proxies_priv(模拟角色)实现类似用户组管理
  7. eclipse maven安装配置
  8. opensearch空查询
  9. WPF自定义搜索框代码分享
  10. 关于Android6.0 之EasyPermissionUtil