---

###一、问题来源

最近遇到一个日期比较的问题如下:

```

root@localhost:test:10:25:48>select from_unixtime(1596680255);

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

| from_unixtime(1596680255) |

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

| 2020-08-06 10:17:35 |

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

1 row in set (0.00 sec)

root@localhost:test:10:25:52>select from_unixtime(1596680255,'%Y-%m-%d') < '2020-08-1';

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

| from_unixtime(1596680255,'%Y-%m-%d') < '2020-08-1' |

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

| 1 |

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

1 row in set (2.70 sec)

root@localhost:test:10:25:59>select from_unixtime(1596680255) < '2020-08-1';

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

| from_unixtime(1596680255) < '2020-08-1' |

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

| 0 |

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

1 row in set (2.36 sec)

```

按理来说from_unixtime(1596680255,'%Y-%m-%d') < '2020-08-1' 应该是false才对,但是返回为true,因此怀疑为字符串比较的方式

###二、问题验证

首先关闭gtid通过create table as 来验证一下字段类型如下:

```

create table testit951

as

select from_unixtime(1596678161,'%Y-%m-%d') as "tt"

create table testit952

as

select from_unixtime(1596678161) as "tt"

```

通过这种方式发现两种建表字段为varchar和datetime类型。通过源码验证可以看到如下:

```

Breakpoint 5, Arg_comparator::compare_string (this=0x7fffe40167c0) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/item_cmpfunc.cc:1672

1672 if ((res1= (*a)->val_str(&value1)))

(gdb) c

Continuing.

Breakpoint 4, Arg_comparator::compare_datetime (this=0x7fffe40164c8) at /cdh/mysqldebug/percona-server-5.7.29-32/sql/item_cmpfunc.cc:1509

1509 THD *thd= current_thd;

(gdb) c

Continuing.

```

可以看到内部通过了string和datetime两种类型来比较。因此得到证明。最后留下比较函数的位置:

Item_cmpfunc.cc

![image.png](https://upload-images.jianshu.io/upload_images/7398834-9a3fa87743742dad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-2709839/,如需转载,请注明出处,否则将追究法律责任。

mysql中比较函数_MySQL:MySQL层比较函数调用相关推荐

  1. 在mysql中通配符_mysql查询中通配符的使用

    mysql查询中通配符的使用 在mysql查询中经常会使用通配符,并且mysql的通配符和pgsql的存在区别(稍候再讨论),而且mysql中还可以使用正则表达式. SQL模式匹配: "_& ...

  2. mysql值比较函数_mysql 比较函数浅用

    今天在操作数据库时,遇到一个问题:修改表中某条数据,比较某个字段原有值和修改值,如果原有值大于修改值,则这个字段不修改,从而引出了是用mysql的比较函数: 举个例子,我现在有一个users表,其中字 ...

  3. mysql中的%_mysql入门

    MySQL 数据库 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整性: 安全,可共享: ...

  4. mysql中主从_MySQL的主从

    以下是个人实例操作得出的结论: mysql的主从同步是一个很成熟的架构: 优点: ①:在从服务器可以执行查询工作,降低主服务器压力(所谓的读写分离) ②:在从主服务器进行备份,避免备份期间影响主流服务 ...

  5. mysql中change用法,mysql 中alter的用法以及一些步骤

    mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...

  6. mysql中locat函数,MySQL中的LOCATE和POSITION函数使用方法 | 很文博客

    不常用:MySQL中的LOCATE和POSITION函数 LOCATE(substr,str) POSITION(substr IN str) 返回子串 substr 在字符串 str 中第一次出现的 ...

  7. mysql 中 end like,MySQL 这三道必问面试题,你都会吗?

    来源:JAVA面试精选 据群友面试反馈,整理了3道MySQL面试题,对很多人可能是小菜一碟,对这些熟悉,有更好的理解的话,可以留言补充,不断完善我们的题库. MySQL查询字段区不区分大小写? MyS ...

  8. mysql中使用正则表达式,mysql中使用正则表达式查询

    基本形式 属性名 regexp '匹配方式' 正则表达式的模式字符 ^ 匹配字符开始的部分 eg1: 从info表name字段中查询以L开头的记录 select * from info where n ...

  9. mysql中加入正则表达式,mysql中的正则表达式搜索

    mysql中的正则表达式搜索 语法: select * from table_name where column_name regexp '正则表达式' 或区分大小写 select * from ta ...

最新文章

  1. 常用的数据结构-链表
  2. Linux块设备概念和列出块设备命令学习
  3. 怎么在vue的@click里面直接写js_【转】为 Node.js 贡献你的力量 ———— 调试代码
  4. canvas笔记-closePath函数的使用(含例子)
  5. The Block披露员工持币情况,UNI等5个币种持有人数最多
  6. python爬虫预测_从爬虫到机器学习预测,我是如何一步一步做到的?
  7. mysql图形化界面MySQL_Workbench
  8. MiniProfiler使用点滴记录-2017年6月23日11:08:23
  9. 2022年我国城镇污水处理运营市场空间可达730亿元
  10. 从Linux服务器下载文件到本地命令
  11. oracle中todate函数实例,pl/sql to_date 函数使用实例讲解
  12. Word插入Latex公式的几种方式(TeXsWord、EqualX、Aurora等工具)
  13. mysql主从同步延迟优化大全
  14. 淘淘商城---8.11
  15. BP学习算法-构建三层神经网络
  16. html超链接并可以返回,返回到上一页的html代码的几种写法
  17. spreadjs~~一个Excel在线编辑的工具
  18. 关注公众号+加微信群,和大家一起畅聊技术
  19. 基于SVN的项目管理——集中与分散
  20. 《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.5 WM8960音频编解码芯片...

热门文章

  1. java连接pda_程序文件直接拷贝到pda设备 (USB连接pc pda wince6.0 C#)
  2. 构建高可用服务器之二 Keepalive参数详解
  3. mysql用户权限与安装Linux操作系统
  4. 第一家线下场景大数据平台Anchor-Point诞生
  5. 乐观锁与悲观锁——解决并发问题
  6. android编译系统Android.mk使用详解
  7. AIX HA模拟宕机--维护磁带机
  8. LINUX TOP,不是这样玩地!!!
  9. C语言:简单而不易懂的声明(二)
  10. MSSQL扫盲系列(4)-系统函数