我需要一些sql转换的帮助。我提供的这部分查询:
'$' + replace(cast((CAST(p.Price1 AS decimal(10,2)) * cast(isnull(p.Multiplier,1) as decimal(10,2))) as varchar), '.0000', '')
基本上,它最终是一个如下所示的varchar:$26980
我需要在千万分之一处插入一个逗号(如果适用)。所以在这个例子中,$26,980
在不重写整个事情的情况下,最简单的方法是什么?
答案 0 :(得分:1)
如果你真的必须在TSQL中这样做,你可以使用CONVERT()
,但这种事情真的不属于数据库:
declare @m money = 12345678
-- with decimal places
select '$' + convert(varchar, @m, 1)
-- without decimal places
select '$' + replace(convert(varchar, @m, 1), '.00', '')
答案 1 :(得分:1)
在客户端进行。话虽如此,这个例子应该告诉你。
with p(price1, multiplier) as (select 1234.5, 10)
select '$' + replace(cast((CAST(p.Price1 AS decimal(10,2)) * cast(isnull(p.Multiplier,1) as decimal(10,2))) as varchar), '.0000', ''),
'$' + parsename(convert(varchar,cast(p.price1*isnull(p.Multiplier,1) as money),1),2)
from p
密钥位于最后一个表达式
中'$' + parsename(convert(varchar,cast(p.price1*isnull(p.Multiplier,1) as money),1),2)
注意:如果p.price1
的精度高于十进制(10,2),那么您可能必须将其强制转换为表达式以生成忠实的翻译,因为原始的CAST(p.Priced1 as decimal(10,2))
将会正在进行四舍五入。
答案 2 :(得分:0)
你可以把它变成一个函数,它只能回50个字符。
DECLARE @input VARCHAR(50)
SELECT @input = '123123123.00'
SELECT @input = CASE WHEN CHARINDEX('.', @input) > offset +1
THEN STUFF(@input, CHARINDEX('.', @input) - offset, 0, ',')
ELSE @input END
FROM (SELECT 3 offset UNION SELECT 7 UNION SELECT 12 UNION SELECT 18 UNION SELECT 25 UNION SELECT 33 UNION SELECT 42) b
PRINT @input
每个位置的偏移量增加+1,因为假设您已经为先前的位置插入了逗号。