我有一个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;
谢谢您的评论。 请原谅我的英语水平! 最好的问候
答案 0 :(得分:0)
解决方案非常简单
WHEN CAST(Groupon.`tipo` AS DECIMAL(10,3)) = 0.7 THEN 21
只需将浮点数转换为十进制,查询运行良好。