我的数据库中有一个包含价格的列,存储为varchar(10)
. 我需要将其拉出的格式有逗号,但没有小数。因此,如果价格为1500.00121
,则应显示为“1,500”,逗号完整。所以这是我到目前为止所拥有的:
CONVERT(varchar, CAST(p.Price1 AS money), 1)
这仍然有小数位".xx"
。如何在保留逗号的同时删除小数和尾随数字?
我的数据库中有一个包含价格的列,存储为varchar(10)
. 我需要将其拉出的格式有逗号,但没有小数。因此,如果价格为1500.00121
,则应显示为“1,500”,逗号完整。所以这是我到目前为止所拥有的:
CONVERT(varchar, CAST(p.Price1 AS money), 1)
这仍然有小数位".xx"
。如何在保留逗号的同时删除小数和尾随数字?
为什么不将其存储在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。当function 被省略或值为0(默认)时, numeric_expression 被舍入。当指定 0 以外的值时, numeric_expression 被截断。
我希望它会工作
declare @q money = 1500.123
select parsename(convert(varchar,convert(money,@q), 1),2)
手头没有 sql server 但类似
Declare @correctlyTyped Money
Set @correctlyTyped = Convert(Money, SomeBadlyTypedField)
Select
Substring(@correctlyTyped,0,DataLength(@correctlyTyped) - CharIndex('.',@correctlyTyped ))
将其转换为货币,然后选择小数点之前的所有内容。
请注意,这取决于数据的区域设置/排序规则。例如,在欧洲大陆, , 是小数点分隔符, . 是千位分隔符。