1

我的数据库中有一个包含价格的列,存储为varchar(10). 我需要将其拉出的格式有逗号,但没有小数。因此,如果价格为1500.00121,则应显示为“1,500”,逗号完整。所以这是我到目前为止所拥有的:

CONVERT(varchar, CAST(p.Price1 AS money), 1)

这仍然有小数位".xx"。如何在保留逗号的同时删除小数和尾随数字?

4

3 回答 3

2

为什么不将其存储在Decimal(10,2)数据类型中?它比存储它要好得多,VARCHAR因为您没有额外的转换为另一种数据类型。

您可以使用CASTROUND功能:

SELECT ROUND(CAST('1500.00121' AS DECIMAL(10,4)), 0, 1)

就是这样。该CAST函数将数据类型转换为另一种数据类型。该ROUND函数返回一个数值,四舍五入到指定的长度或精度。

的原始语法ROUND

ROUND ( numeric_expression , length [ ,function ] )

其中Function参数是要执行的操作类型。Function必须是tinyintsmallintint。当function 被省略或值为0(默认)时, numeric_expression 被舍入。当指定 0 以外的值时, numeric_expression 被截断

SQLFiddle 演示

圆形(MSDN)

十进制 (MSDN)

于 2012-08-27T00:40:14.857 回答
0

我希望它会工作

declare @q money = 1500.123

select parsename(convert(varchar,convert(money,@q), 1),2)
于 2012-08-27T00:19:09.317 回答
0

手头没有 sql server 但类似

Declare @correctlyTyped Money

Set @correctlyTyped = Convert(Money, SomeBadlyTypedField)

Select 
  Substring(@correctlyTyped,0,DataLength(@correctlyTyped) - CharIndex('.',@correctlyTyped ))

将其转换为货币,然后选择小数点之前的所有内容。

请注意,这取决于数据的区域设置/排序规则。例如,在欧洲大陆, , 是小数点分隔符, . 是千位分隔符。

于 2012-08-27T00:40:12.813 回答