2013-05-30 134 views
-2
SELECT LIFNR, 
SUM(CASE WHEN UPPER([WAERS])='USD' THEN ROUND(CONVERT(numeric(10,2),DMBTR)* (-1),2) 
       WHEN UPPER(WAERS)='USD' THEN ROUND(CONVERT(numeric(10,2),DMBTR),2) 
       ELSE ROUND(CONVERT(numeric(10,2),DMBTR),2) 
       END) 
AS 'AMOUNT' 
FROM tbl_BSAK 
GROUP BY LIFNR; 

大家好。SQL,将数据类型varchar转换为数字时出错

我只是写了一段代码,我不断收到错误消息说“错误转换数据类型为varchar到数字。”我敢肯定,这是简单的修复,但我已经花了太多的时间排除故障......

请帮我!!!!由于一吨!

+2

在DMBTR有些价值是无法转换为若干 – shf301

+3

有一定是无法转换为数字的DMBTR列中的数据。没有其他的我们可以帮助你。 –

回答

4

基于语法,我假设这是SQL Server。

如果你想找到有问题的值,这样做:

select * 
FROM tbl_BSAK 
where isnumeric(DMBTR) = 0 and DMBTR is not null; 

要解决该问题,这样做:

SELECT LIFNR, 
SUM(CASE WHEN isnumeric(DMBTR) = 1and UPPER([WAERS])='USD' THEN ROUND(CONVERT(numeric(10,2),DMBTR)* (-1),2) 
       WHEN isnumeric(DMBTR) = 1 and UPPER(WAERS)='USD' THEN ROUND(CONVERT(numeric(10,2),DMBTR),2) 
       when isnumeric(DMBTR) = 1 then ROUND(CONVERT(numeric(10,2),DMBTR),2) 
       END) 
AS 'AMOUNT' 
FROM tbl_BSAK 
GROUP BY LIFNR; 
相关问题