我正在使用以下内容在 T-SQL 中创建逗号格式的数字。我怎样才能摆脱小数点和小数点后的数字。因此,如果我在格式化后得到 1,112.00,我怎么会只得到 1,112?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
我正在使用以下内容在 T-SQL 中创建逗号格式的数字。我怎样才能摆脱小数点和小数点后的数字。因此,如果我在格式化后得到 1,112.00,我怎么会只得到 1,112?
SELECT CONVERT(varchar, CAST(1112 AS money), 1)
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 指出的那样,格式化通常更适合在前端执行。
像这样:
SELECT REPLACE(CONVERT(VARCHAR(20), CAST(1112 AS MONEY), 1), '.00', '');
这将始终正常工作。由于CONVERT(VARCHAR(20), CAST(1112 AS MONEY), 1)
将始终返回一个带有.00
. 但是,如果逗号后面有一个带十进制数字的数字, MitchWheat 的答案会更好。
请注意:您应该考虑在前端应用程序中执行此格式化操作。T-SQL 与格式化无关。
PARSENAME(CONVERT(VARCHAR,CAST(1112 AS MONEY),1),2)
它会很好地工作。
当自动将数字转换为货币数据类型时,小数点后将添加 2 个零。PARSENAME 函数将删除该零。
https://database.guide/how-to-format-numbers-in-sql-server/
从 SQL 2012 开始,您可以编写:
SELECT FORMAT(ColumnName, 'N0');
经过一番研究,我找到了最初问题的 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:我们可以在下面的 T-SQL 代码中使用名为“parsename”的内置系统函数来格式化和截断小数。
SELECT PARSENAME(CONVERT(VARCHAR, CAST('2334442221.345222' AS MONEY), 1),2)