首先,我正在使用 SQL Server 2012 Express 64 位。
我正在尝试将一个 varchar 字段转换为 decimal 并乘以另一个 varchar。
这是我正在尝试在 SELECT 查询中运行的代码:
(CONVERT(decimal(12,2), COALESCE(Lineas.PARAM1, 0.00))) * (CONVERT(decimal(12,2), COALESCE(Lineas.PARAM2, 0.00))) AS 'MULTIPARAM'
其中PARAM1和PARAM2是varchar类型。
这些字段上的数字分别为1和2。如此简单。我希望它返回3.00,但显示的错误是:
Mens. 8114, Nivel 16, Estado 5, Línea 1
Error al convertir el tipo de datos varchar a numeric。
即使PARAM1或PARAM2为null(被转换为0),或者它们是小数(例如:100.5,用点分隔),我也只想获得PARAM1 * PARAM2的结果。
我不明白为什么它不能正常工作...谢谢!
找到错误:
COALESCE(Lineas.PARAM1, 0.00)使其失败"将varchar类型数据转换为numeric";而COALESCE(Lineas.PARAM1, 0)使其失败"将varchar '100.5'转换为int"。(这也不是我的意图)
我该怎么让它“工作”?
JATIN的解决方案:
SELECT (COALESCE(CONVERT(decimal(12,2), NULLIF(REPLACE(Lineas.PARAM1,' ',''),'')), 0.00)) * (COALESCE(CONVERT(decimal(12,2), NULLIF(REPLACE(Lineas.PARAM2,' ',''),'')), 0.00)) AS 'MULTIPARAM'
我所做的是首先替换所有空格,然后如果它是空字符串,则将其设置为NULL,其他的和以前一样。