将VARCHAR转换为小数不起作用SQL Server



我在SQL Server 2012 Express 64位的所有工作中的第一名。

我试图将一个VARCHAR字段转换为十进制并乘以另一个Varchar。

这是我要在选择查询上运行的代码:

(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,但显示的错误是:

男士。8114,Nivel 16,Estado 5,Línea1
错误的contrentir el Tipo deatos varch a数字。

我只想获取param1 * param2的结果,即使param1或param2为null(转换为0),或者如果它们十进制(例如,用dot分隔:100.5)

我不明白为什么它不起作用...谢谢!

找到了错误:

colesce(lineas.param1,0.00)使其失败"转换为数字";和cocece(lineas.param1,0)使其失败"将varchar'100.5'转换为int"。(无论如何这不是我的意图)

我该如何使此"工作"?

jatin的解决方案:

select(cocce(Convers(十进制(12,2),nullif(replace(lineas.param1,'',''),'),''),0.00))),nullif(替换(lineas.param2,''''),''),0.00))为'proultaram'

我要做的是首先替换所有空格,然后如果它是空字符串,则将其设置为null,静止为

尝试这个...

SELECT (COALESCE(CONVERT(decimal(12,2), Lineas.PARAM1), 0.00)) * (COALESCE(CONVERT(decimal(12,2), Lineas.PARAM2), 0.00))  AS 'MULTIPARAM'

问题在这里..

SELECT COALESCE('1', 0.00)

如果您仍然会收到错误"错误将数据类型VARCHAR转换为数字",则您的数据具有0-9以外的其他字符。

你要踢自己。

英语错误消息;

Msg 8115, Level 16, State 8, Line 12
Arithmetic overflow error converting varchar to data type numeric.

样本数据;

IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData
GO
CREATE TABLE #TestData (ID int, Field1 varchar(10), Field2 varchar(10))
INSERT INTO #TestData
VALUES
(1,1,1)
,(2,1,2)
,(3,1,3)
,(4,1,4)
,(5,2,1)
,(6,2,2)
,(7,2,3)

查询(从合并中删除小数点);

SELECT 
ID
,Field1
,Field2
,(CONVERT(decimal(12,2), COALESCE(a.Field1, 0))) * (CONVERT(decimal(12,2), COALESCE(a.Field2, 0)))  AS 'MULTIPARAM'
FROM #TestData a

结果;

ID  Field1  Field2  MULTIPARAM
1   1       1       1.0000
2   1       2       2.0000
3   1       3       3.0000
4   1       4       4.0000
5   2       1       2.0000
6   2       2       4.0000
7   2       3       6.0000

如果您希望结果达到两个小数,则使用此;

SELECT 
ID
,Field1
,Field2
,CONVERT(decimal(12,2),(CONVERT(decimal(12,2), COALESCE(a.Field1, 0))) * (CONVERT(decimal(12,2), COALESCE(a.Field2, 0))))  AS 'MULTIPARAM'
FROM #TestData a

给出这些结果;

ID  Field1  Field2  MULTIPARAM
1   1       1       1.00
2   1       2       2.00
3   1       3       3.00
4   1       4       4.00
5   2       1       2.00
6   2       2       4.00
7   2       3       6.00

如果您在varchar字段中有小数,则请给它;

CONVERT(decimal(12,2),COALESCE(CAST(a.Field1 AS decimal(12,2)), 0) * COALESCE(CAST(a.Field2 AS decimal(12,0)), 0))  AS 'MULTIPARAM'

最新更新