将varchar转换为sql server中的varchar的问题

时间:2012-08-27 00:11:08

标签: sql sql-server tsql

我的数据库中有一个包含价格的列,存储为varchar(10)。我需要将其拉出来的格式为逗号,但没有小数。因此,如果价格是1500.00121,它应该是“1,500”,逗号完好无损。所以这就是我到目前为止所做的:

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

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

3 个答案:

答案 0 :(得分: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必须是 tinyint smallint int 。如果 功能被省略 或者值 0(默认值),则数字_表达式将被舍入。如果指定了除0以外的值,则会截断numeric_expression

SQLFiddle Demo

ROUND (MSDN)

Decimal (MSDN)

答案 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 ))

将其转换为金钱,然后选择小数点以外的所有内容。

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