在mysql当中,字符串类型间进行加减乘除运算的时候,会截取字符串以数字开头的那一部分数字进行运算,如果字符串前面没有数字,那么就只能截取的数值为0,那么进行加减的时候结果都是0,进行乘除的时候结果都是NULL,如下几个结果说明问题:

mysql> select '1a'+'1b';

+-----------+

| '1a'+'1b' |

+-----------+

| 2 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select '2a'-'1b';

+-----------+

| '2a'-'1b' |

+-----------+

| 1 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select '1a'/'2b';

+-----------+

| '1a'/'2b' |

+-----------+

| 0.5 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select 'a'/'b';

+---------+

| 'a'/'b' |

+---------+

| NULL |

+---------+

1 row in set, 3 warnings (0.00 sec)

mysql> select 'a' - 'b';

+-----------+

| 'a' - 'b' |

+-----------+

| 0 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

mysql> select 'a' + 'b';

+-----------+

| 'a' + 'b' |

+-----------+

| 0 |

+-----------+

1 row in set, 2 warnings (0.00 sec)

如果一个字符串以数字开头,后面有非数字和数字组合的话,在进行运算的时候,会省略掉非数字和数字组合那一段,也就是只会截取开头的数字

mysql> select '2015-2-1' - '2015-1-1';

+-------------------------+

| '2015-2-1' - '2015-1-1' |

+-------------------------+

| 0 |

+-------------------------+

1 row in set, 2 warnings (0.00 sec)

以上相当于2015-2015=0

mysql当字符串进行大小比较的时候

mysql> select '2015-2-1' > '2015-1-1';

+-------------------------+

| '2015-2-1' > '2015-1-1' |

+-------------------------+

| 1 |

+-------------------------+

1 row in set (0.00 sec)

mysql> select '2015-2-1' < '2015-1-1';

+-------------------------+

| '2015-2-1' < '2015-1-1' |

+-------------------------+

| 0 |

+-------------------------+

1 row in set (0.00 sec)

在这里非常奇怪,'2015-2-1' - '2015-1-1' = 0,为什么大小比较的时候会有大小之分呢?

原来对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在某位置上已经有大小之分,那么就不会再进行比较。

mysql> select '2017-03-20 15:27:49' > '2017-03-20 15:27:48';

+-----------------------------------------------+

| '2017-03-20 15:27:49' > '2017-03-20 15:27:48' |

+-----------------------------------------------+

| 1 |

+-----------------------------------------------+

1 row in set (0.00 sec)

看起来像日期的字符串可以用date_format函数提取当中的年月日,看如下:

mysql> select date_format('2017/03/20 15:27:49','%Y') 年,date_format('2017/03/20 15:27:49','%c') 月,date_format('2017/03/20 15:27:49','%d') 日;

+------+------+------+

| 年 | 月 | 日 |

+------+------+------+

| 2017 | 3 | 20 |

+------+------+------+

1 row in set (0.00 sec)

非数字字符在比较大小的时候,就例如:

mysql> select 'a' < 'b';

+-----------+

| 'a' < 'b' |

+-----------+

| 1 |

+-----------+

1 row in set (0.00 sec)

当中的字母会转成ascii码,再进行比较,以上是单字母字符串比较,如果是多字母数字混合字符串比较呢?

mysql> select '1c' > 'bc';

+-------------+

| '1c' > 'bc' |

+-------------+

| 0 |

+-------------+

1 row in set (0.00 sec)

mysql> select '1yz' > 'abc999';

+------------------+

| '1yz' > 'abc999' |

+------------------+

| 0 |

+------------------+

1 row in set (0.00 sec)

其实从上面的结果大概可以猜测得到,为让解释更清晰更有说服力,再看下图:

mysql> select ascii('1c'),ascii('bc');

+-------------+-------------+

| ascii('1c') | ascii('bc') |

+-------------+-------------+

| 49 | 98 |

+-------------+-------------+

1 row in set (0.00 sec)

mysql> select ascii('1yz'),ascii('abc999');

+--------------+-----------------+

| ascii('1yz') | ascii('abc999') |

+--------------+-----------------+

| 49 | 97 |

+--------------+-----------------+

1 row in set (0.00 sec)

字符串大小比较的时候,会从左向右将两个字符串第一个不相等的两个字符的ascii码的比较结果作为最终结果

mysql做四则运算_MySQL字符串进行四则运算以及比较相关推荐

  1. mysql substring用法_Mysql字符串截取函数SUBSTRING的用法说明

    函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my ...

  2. mysql concat 变量_MySQL 字符串连接CONCAT()函数

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

  3. mysql 拼接数字_mysql 字符串操作,mysql 连接字符串,mysql 拼接字符串,mysql 拼接字段...

    ASCII(str) 返回字符串 str 的第一个字符的 ASCII 值 (str 是空串时返回 0) mysql> select ASCII(‟2′); -> 50 mysql>  ...

  4. mysql做前端_MySQL 还可以这样做

    多个字段唯一性如何处理? 情景 有张表,表里有多个字段需要唯一,不能重复,否则就是重复数据,插不进去 传统做法 直接给多个字段直接加唯一索引,简单粗暴 现在做法 新增一个字段,这个字段加唯一索引,这样 ...

  5. mysql做心跳_mysql 心跳检测

    MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存.如果你的MySQL S ...

  6. mysql做心跳_MySQL运维-主从复制心跳

    1 心跳参数简介 设置复制心跳的周期,取值范围为0 到 4294967秒.精确度可以达到毫秒,最小的非0值是0.001秒.心跳信息由master在主机binlog日志文件在设定的间隔时间内没有收到新的 ...

  7. mysql截取字符串最后两位_Mysql字符串截取函数SUBSTRING的用法说明

    感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) 说明:le ...

  8. mysql 全文检索 教程_mysql怎么做全文检索

    mysql做全文检索的方法: 1.自然语言检索:IN NATURAL LANGUAGE MODE 2.布尔检索:IN BOOLEAN MODE 剔除一半匹配行以上都有的词,譬如说,每个行都有this这 ...

  9. mysql截取字符串后缀_Mysql字符串截取函数SUBSTRING的用法说明

    今天建视图时,用到了MySQL中的字符串截取,很是方便 感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截 ...

最新文章

  1. 关于python文件读写小结
  2. OpenCV+python:直方图的应用(二)
  3. 基于U-Net图像分割的划痕缺陷分割(课程设计)
  4. 和平精英微信和qq不是一个服务器,和平精英微信和QQ玩家能不能一起玩?微信和QQ怎么开黑建房[图]...
  5. C语言do...while语句的妙用(包裹宏替换多句代码)(代替go to语法)(隔绝外部变量)
  6. s5-13 RIP 为什么会 衰败
  7. lua split实现(lua程序设计10.6练习10.1题)
  8. mac svn工具_Cornerstone 4 for mac(svn管理工具)
  9. 我身边的计算机网,电脑在我身边作文700字
  10. 华为暂没有推出鸿蒙手机计划;苹果否认 iPhone 辐射超标;Kotlin 1.3.50 发布 | 极客头条...
  11. LeetCode 530二叉搜索树的最小绝对差
  12. windows apache 负载均衡配置 Tomcat集群配置
  13. SQLLDR载数加速,优化参数
  14. 通讯录 按中文名字 拼音首字母 排序
  15. c语言有开始菜单的flybird,C语言实现Flybird
  16. 读书 曾国藩(最新图文版)
  17. 深度学习——人生为数不多的好出路
  18. 处理 yarn 项目 has unmet peer dependency
  19. thinkphp6 验证码总是提示不正确
  20. 生成随机字符串序列号类似于UUID,但是比较短的那种。

热门文章

  1. 1_数据分析—数据载入、导出和探索
  2. 2dpsk差分相干解调matlab,基于systemview和matlab的2DPSK
  3. java sql inj_Java防止SQL注入的几个途径
  4. docker 管理工具_详解Docker可视化管理工具shipyard--部署教程及功能展示
  5. java泛型区间_JAVA 14(泛型)
  6. python中的点的作用_Python基础学习中关键点的作用(三),python,重点,之,函数,3
  7. 栈的pop和peek_从堆栈中移除项目,而不使用pop、peek、push
  8. idea+selenium代码_你试过使用selenium爬虫抓取数据吗
  9. 安卓学习笔记22:常用控件 - 可展开列表视图
  10. e300氛围灯哪里调节_黑色的奔驰E300有了亚光膜的加持 一出场就惊艳四座