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

mysql set age=‘0‘ 和 set age=0的区别?

select case when(t1.business_transfer=‘source’)then 0 else t1.settlement_tyy_cash_amount end as tyy from t_settlement_waybill t1 where waybill_sn in (‘2025010700001’);
select case when(t1.business_transfer=‘source’)then (t1.settlement_tyy_cash_amount=‘0’) else t1.settlement_tyy_cash_amount end as tyy from t_settlement_waybill t1 where waybill_sn in (‘2025010700001’);
为什么这两个SQL执行结果不一致

这两个SQL查询的主要差异在于CASE语句中的处理方式。

第一个查询:

SELECT 
    CASE 
        WHEN t1.business_transfer='source' THEN 0 
        ELSE t1.settlement_tyy_cash_amount 
    END as tyy 
FROM 
    t_settlement_waybill t1 
WHERE 
    waybill_sn in ('2025010700001');

在这个查询中,当t1.business_transfer的值为’source’时,tyy的值会被设置为0。否则,它会使用t1.settlement_tyy_cash_amount的当前值。这里并没有尝试将t1.settlement_tyy_cash_amount设置为字符串’0’,只是进行了比较和赋值。

第二个查询:

SELECT 
    CASE 
        WHEN t1.business_transfer='source' THEN (t1.settlement_tyy_cash_amount='0') 
        ELSE t1.settlement_tyy_cash_amount 
    END as tyy 
FROM 
    t_settlement_waybill t1 
WHERE 
    waybill_sn in ('2025010700001');

在这个查询中,当t1.business_transfer的值为’source’时,tyy的值会被设置为一个布尔值,表示t1.settlement_tyy_cash_amount是否等于字符串’0’。如果相等,它会返回TRUE(或相应的布尔值),否则它会返回t1.settlement_tyy_cash_amount的原始值。这意味着结果可能是布尔值或数字,取决于t1.settlement_tyy_cash_amount的值。这也可能导致数据类型的不一致,这在某些数据库系统中可能会引起错误或不期望的行为。此外,在许多数据库系统中,尝试将布尔值作为数字处理可能会导致意外的结果。这可能是两个查询结果不一致的原因。

当t1.settlement_tyy_cash_amount的原始值分别为0,10时,对应的第二条SQL执行结果是什么?

SELECT 
    CASE 
        WHEN t1.business_transfer='source' THEN (t1.settlement_tyy_cash_amount='0') 
        ELSE t1.settlement_tyy_cash_amount 
    END as tyy 
FROM 
    t_settlement_waybill t1 
WHERE 
    waybill_sn in ('2025010700001');

在这个查询中,当t1.business_transfer 为 ‘source’ 时,tyy 的值将根据t1.settlement_tyy_cash_amount='0'的结果来决定。这个表达式会比较t1.settlement_tyy_cash_amount是否等于字符串’0’。

如果 t1.settlement_tyy_cash_amount 的原始值为0:

  • t1.business_transfer等于’source’时:
    • (t1.settlement_tyy_cash_amount = '0') 结果为 TRUE(通常在某些数据库中为1)。
  • t1.business_transfer不等于’source’时:
    • tyy的值为0(因为直接返回t1.settlement_tyy_cash_amount),结果为0。

如果 t1.settlement_tyy_cash_amount 的原始值为10:

  • t1.business_transfer等于’source’时:
    • (t1.settlement_tyy_cash_amount = '0') 结果为 FALSE(通常在某些数据库中为0)。
  • t1.business_transfer不等于’source’时:
    • tyy的值为10(返回原始值)。

总结:

  1. t1.settlement_tyy_cash_amount 为 0,且 t1.business_transfer 为’source’时,tyy的值为TRUE(或1)
  2. t1.settlement_tyy_cash_amount 为 0,且 t1.business_transfer 非’source’时,tyy的值为0
  3. t1.settlement_tyy_cash_amount 为 10,且 t1.business_transfer 为’source’时,tyy的值为FALSE(或0)
  4. t1.settlement_tyy_cash_amount 为 10,且 t1.business_transfer 非’source’时,tyy的值为10

idea free版
https://pan.quark.cn/s/dd7db30d835f
free 🎬大全
https://kdocs.cn/l/cqhxNU9I2lLD
12306买票科技
https://pan.quark.cn/s/45f6bf9be1b3

在这里插入图片描述


http://www.kler.cn/a/502781.html

相关文章:

  • 服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例
  • Http 响应状态码 前后端联调
  • css 布局及动画应用(flex+transform+transition+animation)
  • Spring Data Elasticsearch简介
  • CSS3的aria-hidden学习
  • arcgis中用python脚本批量给多个要素类的相同字段赋值
  • 【21天学习AI底层概念】day11 (kaggle新手入门教程)Your First Machine Learning Model
  • qt设置qwidget背景色无效
  • arcgis中用python脚本批量给多个要素类的相同字段赋值
  • HTTP 入门:认识网络通信基础
  • 【WPS】【WORDWORD】【JavaScript】实现微软WORD自动更正的效果
  • Blazor开发复杂信息管理系统的优势
  • 【Linux】编辑器之神vim使用教程
  • 电力场景红外测温图像均压环下的避雷器识别分割数据集labelme格式2436张1类别
  • 8Hive SQL底层执行原理
  • 如何提高自动化测试覆盖率和效率
  • .NET framework、Core和Standard都是什么?
  • Linux IPC:管道与FIFO汇总整理
  • C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
  • css盒子水平垂直居中
  • 下载的stable diffudion 模型如何转换到diffusers可用的格式
  • SQLynx 数据库管理平台 3.6.0 全新发布:全面支持华为数据库和ClickHouse,代码提示更智能!
  • 软考信安21~网络设备安全
  • Android Room 构建问题:There are multiple good constructors
  • 备战春招—高频芯片设计面试题
  • DuckDB:星号(*)表达式完整指南