我的数据库中有一个包含价格的列,存储为varchar(10)
。我需要将其拉出来的格式为逗号,但没有小数。因此,如果价格是1500.00121
,它应该是“1,500”,逗号完好无损。所以这就是我到目前为止所做的:
CONVERT(varchar, CAST(p.Price1 AS money), 1)
这仍然是".xx"
的小数位。如何在保留逗号的同时删除小数和尾随数字?
答案 0 :(得分:2)
为什么不将它存储在Decimal(10,2)
数据类型中?它比将它存储在VARCHAR
要好得多,因为你没有额外的转换到另一种数据类型。
您可以使用CAST
和ROUND
功能:
SELECT ROUND(CAST('1500.00121' AS DECIMAL(10,4)), 0, 1)
就是这样。 CAST
函数将数据类型转换为另一种数据类型。 ROUND
函数返回一个数值,四舍五入到指定的长度或精度。
ROUND
的原始语法是
ROUND ( numeric_expression , length [ ,function ] )
其中Function
参数是要执行的操作类型。 Function
必须是 tinyint , smallint 或 int 。如果 功能被省略 或者值 0(默认值),则数字_表达式将被舍入。如果指定了除0以外的值,则会截断numeric_expression 。
答案 1 :(得分:0)
我希望它会起作用
declare @q money = 1500.123
select parsename(convert(varchar,convert(money,@q), 1),2)
答案 2 :(得分:0)
手头没有sql server但是像
这样的东西Declare @correctlyTyped Money
Set @correctlyTyped = Convert(Money, SomeBadlyTypedField)
Select
Substring(@correctlyTyped,0,DataLength(@correctlyTyped) - CharIndex('.',@correctlyTyped ))
将其转换为金钱,然后选择小数点以外的所有内容。
请注意,这取决于数据的区域设置/排序规则。例如,在欧洲大陆,是小数分隔符和。是千分隔符。