我有一个专栏" POLICY_RATE_AMOUNT"这是多种数据集,它具有美元价值

时间:2017-04-27 07:16:50

标签: sql-server-2008

现在我想在该列中添加一千个分隔符。 但是当我将此查询添加到该列

select REPLACE(CONVERT(VARCHAR,CONVERT(MONEY,POLICY_RATE_AMOUNT),1), '.00','') from table 

我收到此错误

  

无法将char值转换为money。

请帮忙

2 个答案:

答案 0 :(得分:0)

如果$位于该值之后,如100 $那么以下查询将有助于转换。

    create table #tmp (POLICY_RATE_AMOUNT varchar(10))
insert into #tmp values ('$100'),('-$150')
select REPLACE(CONVERT(MONEY,RIGHT(POLICY_RATE_AMOUNT,LEN(POLICY_RATE_AMOUNT)-1)), '.00','')
FROM #tmp
WHERE LEN(POLICY_RATE_AMOUNT)=LEN(REPLACE(POLICY_RATE_AMOUNT,'-',''))
UNION ALL
select REPLACE(CONVERT(MONEY,RIGHT(POLICY_RATE_AMOUNT,LEN(POLICY_RATE_AMOUNT)-1)), '.00','')
FROM #tmp
WHERE LEN(POLICY_RATE_AMOUNT)!=LEN(REPLACE(POLICY_RATE_AMOUNT,'-',''))
drop table #tmp

答案 1 :(得分:0)

首先:始终使用适当的类型来存储您的值!

其次:永远不要使用(n)char(与(n)varchar相同)没有大小! (Aaron Bertrand: Bad habits to kick

第三:永远不要存储信息,这只是格式问题和价值(美元符号)。

现在检查一下

SELECT CONVERT(MONEY,'$1234.56') --This works. The leading "$" is ignored.
SELECT CONVERT(MONEY,'1234.56$') --Breaks with your error message

作为修复修复,您可以使用replace来删除符号:

select REPLACE(CONVERT(VARCHAR,CONVERT(MONEY,REPLACE(POLICY_RATE_AMOUNT,'$','')),1), '.00','') from xyz