SQL查询比较不匹配的十进制值并返回NULL值

时间:2018-09-06 21:02:38

标签: mysql sql decimal case

我有一个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;

谢谢您的评论。 请原谅我的英语水平! 最好的问候

1 个答案:

答案 0 :(得分:0)

解决方案非常简单

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

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