首页 > 解决方案 > SQL查询比较十进制值不匹配并返回NULL值

问题描述

我有一个 SQL 查询,并且在它咨询的字段之间有一个验证,该验证比较一个名为“tipo”的字段,并根据它为“dias_validez”字段分配一个值,问题是当大小写是像“0.7”这样的十进制数或“1.5”,验证不起作用并返回 NULL 值

SELECT
    Usuario.`id_usuario`,
    Usuario.`nombre_usuario`,
    Usuario.`groupon`,
    Groupon.`tipo`,
    DATEDIFF(NOW(), Facturacion.`fecha_inicio`) AS dias_pasados,
    Perfil.`comoseentero`,

    CASE 
    WHEN Groupon.`tipo` = 1 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) <=24 THEN 0
    WHEN Groupon.`tipo` = 1 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) >24 AND  DATEDIFF(NOW(), Facturacion.`fecha_inicio`) <=30 THEN 1
    WHEN Groupon.`tipo` = 1 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) >30 THEN 2
    WHEN Groupon.`tipo` = 2 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) <=54 THEN 0
    WHEN Groupon.`tipo` = 2 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) >54 AND  DATEDIFF(NOW(), Facturacion.`fecha_inicio`) <=54 THEN 1
    WHEN Groupon.`tipo` = 2 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) >60 THEN 2
    WHEN Groupon.`tipo` = 3 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) <=84 THEN 0
    WHEN Groupon.`tipo` = 3 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) >84 AND  DATEDIFF(NOW(), Facturacion.`fecha_inicio`) <=94 THEN 1
    WHEN Groupon.`tipo` = 3 AND DATEDIFF(NOW(), Facturacion.`fecha_inicio`) >90 THEN 2
    END AS resultado,

    CASE
    WHEN Groupon.`tipo` = 1 THEN 30
    WHEN Groupon.`tipo` = 2 THEN 60
    WHEN Groupon.`tipo` = 3 THEN 90
    WHEN Groupon.`tipo` = 0.7 THEN 21
    WHEN Groupon.`tipo` = 1.2 THEN 35
    WHEN Groupon.`tipo` = 1.5 THEN 45
    WHEN Groupon.`tipo` = 12 THEN 365
    WHEN Groupon.`tipo` = 0 THEN 'N/A'
    END AS dias_validez
    FROM
    Usuario
    JOIN Groupon
    ON Usuario.`groupon` = Groupon.`groupon`
    JOIN Facturacion
    ON Facturacion.`id_proceso` = Usuario.`id_usuario`
    JOIN Perfil
    ON Usuario.`id_usuario` = Perfil.`id_proceso_perfil` GROUP BY Usuario.id_usuario ORDER BY resultado;

谢谢您的意见。请原谅我的英语水平!最好的祝福

标签: mysqlsqldecimalcase

解决方案


解决方案非常简单

WHEN CAST(Groupon.`tipo` AS DECIMAL(10,3)) = 0.7 THEN 21

只需要将浮点数转换为十进制并且查询运行良好。


推荐阅读