美文网首页
MySQL:MySQL层比较函数调用

MySQL:MySQL层比较函数调用

作者: 重庆八怪 | 来源:发表于2020-08-06 11:25 被阅读0次

一、问题来源

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

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

相关文章

  • MySQL:MySQL层比较函数调用

    一、问题来源 最近遇到一个日期比较的问题如下: 按理来说from_unixtime(1596680255,'%Y-...

  • 1-(2)、MySql——基础部分

    一、MySQL之函数(单行函数、分组函数) 1、概述 调用语法:select函数名(实参列表);分组函数和单行函数...

  • mysql函数

    MySQL聚合函数 MySQL聚合函数[http://www.yiibai.com/mysql/aggregate...

  • 三. PHP与MySQL关系大揭秘

    PHP内置MySQL函数学习(1) PHP内置MySQL函数学习(2) PHP内置MySQL函数学习(2)

  • MySQL IFNULL函数简介

    MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是...

  • Ⅳ.sql原理

    一、mysql架构 Server层涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密...

  • 函数

    函数分类 任何函数都有返回值,函数的调用是有select调用。mysql中字符串操作的基本单位为字符 系统函数 s...

  • 5/04day46_MySQL函数&事务

    回顾 MySQL函数&事务 今日目标 一 MySQL函数 为了简化操作,mysql提供了大量的函数给程序员使用(比...

  • 2018-03-20

    MYSQL查询语句 MYSQL复杂操作语句 MYSQL多表查询方法 函数部分

  • 03MySQL的函数

    MySQL的函数 在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数。函数可以理解为别人封...

网友评论

      本文标题:MySQL:MySQL层比较函数调用

      本文链接:https://www.haomeiwen.com/subject/xskzrktx.html