当前位置: 首页 > news >正文

【mysql调研】ifnull/least/greatest 5.7.44

文档:
如果任何一个参数是 NULL,结果就是 NULL
如果传给 LEAST() 函数的任何一个参数是 NULL,那么结果就会是 NULL,并且不需要做进一步的比较操作。
原因:在 SQL 中,NULL 表示“未知”值,因此无法与其他值进行有效比较。即使只有一个参数是 NULL,结果也会是 NULL。

  1. 如果所有参数都是整数类型,进行整数比较
    如果所有传入的参数都是整数类型(如 INT、TINYINT、BIGINT 等),那么它们会被作为整数来比较。
    例子:LEAST(2, 5, 1) 返回 1,因为它们都为整数,进行整数比较。

  2. 如果至少一个参数是双精度浮点数(DOUBLE),则将它们作为双精度浮点数比较
    如果至少有一个参数是 DOUBLE 类型(双精度浮点数),那么所有参数都会被转换为 DOUBLE 类型进行比较。
    例子:LEAST(2.5, 1, 5.7) 返回 1,因为其中有双精度数值 2.5 和 5.7,所以它们会被转换为 DOUBLE 类型进行比较。

  3. 如果至少有一个参数是 DECIMAL 类型,则作为 DECIMAL 类型进行比较
    如果至少有一个参数是 DECIMAL 类型(即高精度小数),则所有参数都会被当作 DECIMAL 类型进行比较。
    例子:LEAST(1.5, 2, 1.25) 中如果 1.5 或 1.25 是 DECIMAL 类型,所有参数都会当作 DECIMAL 进行比较。

  4. 如果参数包含数字和字符串的混合,则它们会作为数字进行比较
    如果传入的参数包括数字和字符串类型,MySQL 会将字符串尝试转换为数字,然后进行比较。
    例子:LEAST("2", 3) 中字符串 "2" 会被转换为数字 2,然后进行数字比较。

  5. 如果任何一个参数是非二进制字符串(如 CHAR 或 VARCHAR),则它们会作为非二进制字符串进行比较
    如果传入的参数中有任何一个是非二进制字符串(即 CHAR、VARCHAR 类型),则所有的参数都会作为非二进制字符串进行比较。非二进制字符串包括一般的文本字符串。
    例子:LEAST('apple', 'banana') 比较的是字符串内容的字典顺序。

  6. 在其他情况下,参数会作为二进制字符串进行比较
    如果传入的参数既没有数字也没有字符,或者是二进制字符串(BINARY 类型),则它们会作为二进制字符串进行比较。
    例子:LEAST(BINARY '101', BINARY '100') 比较的是二进制字符串的顺序。

  7. LEAST() 函数的返回类型
    LEAST() 函数的返回类型是比较过程中所涉及的参数类型的聚合类型。这意味着 MySQL 会根据输入参数的类型选择最合适的返回类型。
    如果参数都是数字类型,它会返回数字类型。
    如果参数包含字符串,则会根据字符集和排序规则决定返回的字符串类型。

总结
LEAST() 函数的作用是返回所有参数中的最小值。其比较规则按以下优先级执行:
如果任何参数是 NULL,返回 NULL。
如果所有参数是整数,则进行整数比较。
如果有(DOUBLE),则将所有参数转换为浮动数进行比较。
如果有 DECIMAL,则将所有参数转换为 DECIMAL 进行比较。
如果参数是数字和字符串的混合,则转换为数字进行比较。
如果有非二进制字符串,则按字符串顺序进行比较。
否则按二进制字符串进行比较。


用例:


drop table t1;
create table t1(nm decimal(10,5), db double, fl float, ii int);
insert into t1 values(5.25, 5.25, 5.25, 5);select least(nm, 1) from t1;
create or replace view vv as select least(nm, 1) from t1;
desc vv;select nm, db, least(nm, db) from t1;
create or replace view vv as select least(nm, db) from t1;
desc vv;select nm, fl, least(nm, fl) from t1;
create or replace view vv as select least(nm, fl) from t1;
desc vv;select nm, ii, least(nm, ii) from t1;
create or replace view vv as select least(nm, ii) from t1;
desc vv;select greatest('100', ii) from t1;
create or replace view vv as select greatest('100', ii) from t1;
desc vv;select greatest(date'2022-01-01', 1);
create or replace view vv as select greatest(date'2022-01-01', 1);
desc vv;select greatest(timestamp'2022-01-01 01:01:00', 1);
create or replace view vv as select greatest(timestamp'2022-01-01 01:01:00', 1);
desc vv;select greatest(timestamp'2022-01-01 01:01:00', 9999999999999999999999999);
create or replace view vv as select greatest(timestamp'2022-01-01 01:01:00', 9999999999999999999999999);
desc vv;select ifnull(null, null);
create or replace view vv as select ifnull(null, null);
desc vv;

表现:
优先级
double>number
float, number ->double

数字和字符混合都是返回double

date和tiemstamp什么的返回数值,比较按数值比,但是类型待定

http://www.jsqmd.com/news/79410/

相关文章:

  • AI如何自动修复Git版本识别错误
  • EKB 与 OP-TEE 如何真正保护你的密钥
  • DB-GPT在企业数据仓库中的实战应用
  • Nacos数据库表结构升级实战:从版本冲突到平滑迁移的完整解决方案
  • Java CountDownLatch 用法和源码解析
  • 那个曾不可一世的甲骨文,正在被AI时代抛弃
  • 开源的域名资产管理工具:可视化监控与到期提醒
  • 消息队列设计:从同步到异步的性能突破
  • 如何用AI优化fcitx5中文输入法的词库和预测
  • 传统调试vsAI辅助:解决Spring启动异常效率对比
  • 一个完全本地运行的视频转文字工具:Vid2X
  • 函数式编程学习(Java)
  • DB-GPT:AI如何革新数据库管理与查询
  • 浅析Spring中的PropertySource 的基本使用
  • 3小时打造6v电影网MVP原型实战
  • ZooKeeper 基本概述
  • 基于Springboot瑜伽馆管理系统【附源码+文档】
  • 当PDF遇上AI:MinerU如何用1.2B参数吊打千亿级大模型?
  • 微服务面试题:概览
  • LangGraph深度解析:从图基础到人机交互的AI工作流框架实践
  • 无需安装!在线体验n8n的5种创新方法
  • Java 开发最容易犯的 10 个错误
  • 意图识别深度原理解析:从向量空间到语义流形
  • RepoEval:定义仓库级代码补全评估的新基准
  • java Happens - before 原则到底是什么
  • 提升资源管理效率必备工具推荐
  • 2025 年 12 月雅安市汽车租赁服务权威推荐榜:轿车、豪车、越野车、婚车、大巴车、商务车、房车、旅游车、跑车、皮卡车一站式尊享服务 - 品牌企业推荐师(官方)
  • C++--
  • 2025年12月软件开发公司权威推荐榜:小程序开发、APP开发,专业定制与创新技术实力深度解析 - 品牌企业推荐师(官方)
  • 关于-根据-ISO8601-国际标准-计算一年中的周数-每年最少52周-每多53周