在SQL Server 2008 R2中用逗号格式化数字但没有小数?

时间:2012-11-03 07:38:11

标签: sql sql-server sql-server-2008

我使用以下命令在T-SQL中创建逗号格式化的数字。如何摆脱小数点和小数点后的数字。因此,如果格式化后得到1,112.00,我怎么才能得到1,112?

SELECT CONVERT(varchar, CAST(1112 AS money), 1)

5 个答案:

答案 0 :(得分:17)

DECLARE @val varchar(50)

set @val = CONVERT(varchar(50), CAST(1112 AS money), 1)
SELECT  left(@val, len(@val) - 3)

这也适用于小数点后的数字:

DECLARE @val varchar(50)

set @val = CONVERT(varchar(50), CAST(1112.56 AS money), 1)
SELECT  left(@val, len(@val) - 3)

注意:正如@Mahmoud Gamal指出的那样,格式化通常更适合在前端执行。

答案 1 :(得分:16)

像这样:

SELECT REPLACE(CONVERT(VARCHAR(20), CAST(1112 AS MONEY), 1), '.00', '');

这总是可行的。由于CONVERT(VARCHAR(20), CAST(1112 AS MONEY), 1)将始终返回.00的数字。但是,如果逗号后面有带小数的数字,MitchWheat's answer会更好。

请注意:您应该考虑在前端应用程序中执行此格式化操作。 T-SQL不是关于格式化的。

答案 2 :(得分:9)

PARSENAME(CONVERT(VARCHAR,CAST(1112 AS MONEY),1),2)

它会很好用。

当自动将数字转换为货币数据类型时,将在小数点后添加2个零。 PARSENAME函数将删除该零。

答案 3 :(得分:1)

经过一些研究,我发现了我最初问题的2个可能答案。它们列在下面。

选项1 :Mitch Wheat的答案是一个可能的答案。但是,当想要在SELECT中格式化列值时,我们必须使用Mitch的T-SQL代码创建用户定义的标量函数,并从我们的SQL中调用此UDF。

-- =============================================
-- Description: Formats a number and truncates 
--              the decimal part. You can pass 
--              a number as a string or a numeric type.
-- =============================================
CREATE FUNCTION dbo.Utility_fn_FormatNumberAndTruncateDecimals
(
   @unFormattedNumber VARCHAR(100)
)
 RETURNS VARCHAR(100)
  AS
 BEGIN
   DECLARE @val VARCHAR(100)
   SET @val = convert(VARCHAR(50), cast(@unFormattedNumber AS MONEY), 1)

   RETURN (SELECT left(@val, len(@val) - 3))
 END
 GO

 --call this function using either of the SELECTS below
 SELECT dbo.Utility_fn_FormatNumberAndTruncateDecimals('233444')
 SELECT dbo.Utility_fn_FormatNumberAndTruncateDecimals(233444.345)

选项2:我们可以使用名为' parsename'的内置系统函数。如下面的T-SQL代码,格式化和截断小数。

SELECT PARSENAME(CONVERT(VARCHAR, CAST('2334442221.345222'  AS MONEY), 1),2)

答案 4 :(得分:1)

https://database.guide/how-to-format-numbers-in-sql-server/

从SQL 2012开始,您可以编写:

SELECT FORMAT(ColumnName, 'N0');