自学内容网 自学内容网

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

在这里插入图片描述


原文地址:https://blog.csdn.net/kaichekaihanma/article/details/145110200

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!