现在我想在该列中添加一千个分隔符。 但是当我将此查询添加到该列
时select REPLACE(CONVERT(VARCHAR,CONVERT(MONEY,POLICY_RATE_AMOUNT),1), '.00','') from table
我收到此错误
无法将char值转换为money。
请帮忙
答案 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