我们有一个表格,我们使用一列来存储商品的价格。列大小为17.2十进制。我们需要在字符串中包含千位分隔符和小数点分隔符。我们目前正在使用这个:
SELECT '$' + convert(varchar,cast('2123232322323.21' as money),-1) as Price
但如果大小超过15位,则会引发错误。
答案 0 :(得分:0)
money
类型没有足够的范围用于OP正在使用的数字。理想情况下,这种事情将在表示层完成,但OP想要一个SQL解决方案,所以我已经开始使用TSQL解决方案了。
TSQL比我好的人可以改善这一点,但我相信它会做OP想要的。理想情况下,它将被制作成更通用的用户定义函数。它没有考虑区域设置(一些欧洲国家使用'。'作为千位分隔符,','作为小数点。)
DECLARE @Price decimal(19,2)
DECLARE @PriceString varchar(20)
DECLARE @DP int
DECLARE @Decimals varchar(3)
DECLARE @ResultString varchar(25)
SELECT @Price = 12345678901234567.89
SELECT @PriceString = CONVERT(varchar(20), @Price)
SELECT @DP = CHARINDEX('.', @PriceString)
SELECT @Decimals = SUBSTRING(@PriceString, @DP, LEN(@PriceString)-@DP+1)
SELECT @PriceString = SUBSTRING(@PriceString, 1, @DP-1)
SELECT @PriceString = REVERSE(@PriceString)
DECLARE @ix int
SELECT @ResultString = ''
SELECT @ix = 1
WHILE @ix <= LEN(@PriceString)
BEGIN
SELECT @ResultString = SUBSTRING(@PriceString, @ix, 1) + @ResultString
if @ix %3 = 0 AND @ix <> LEN(@PriceString)
BEGIN
SELECT @ResultString = ',' + @ResultString
END
SELECT @ix = @ix +1
END
SELECT @ResultString = @ResultString + @Decimals
SELECT @ResultString