尝试在Money中格式化INT,但收到错误:FORMAT不是公认的内置函数

时间:2016-06-13 18:07:56

标签: tsql

我正在尝试格式化1588000之类的金额,如$1,588,000

我试过了:

CASE
    WHEN nb.AmountDollars IS NOT NULL THEN 
            CAST(FORMAT(nb.AmountDollars, '##,##0') AS VARCHAR(50))
    ELSE '' 
END     

但我收到错误'FORMAT' is not a recognized built-in function name.

然而,我在使用FORMAT的stackoverflow人员中看到了许多答案。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这是一个快速而脏的标量函数,可以为你分割值。

CREATE FUNCTION [dbo].[fn_FormatDollars]
    (
    @RawValue INT
    )
RETURNS VARCHAR(20)
AS
BEGIN
    DECLARE @FormattedValue VARCHAR(20)

    IF LEN(@RawValue) > 6
        BEGIN
            SELECT
                @FormattedValue = '$' + 
                LEFT(CAST(@RawValue AS VARCHAR),1) + ',' +
                SUBSTRING(CAST(@RawValue AS VARCHAR),2,3) + ',' +
                RIGHT(CAST(@RawValue AS VARCHAR),3)
        END
    ELSE
        BEGIN
            SELECT
                @FormattedValue ='$' + 
                SUBSTRING(CAST(@RawValue AS VARCHAR),1,3) + ',' +
                RIGHT(CAST(@RawValue AS VARCHAR),3)
        END 

    RETURN @FormattedValue
END
GO

然后在你的领域中使用它:

SELECT [dbo].[fn_FormatDollars](nb.[AmountDollars])

示例:

SELECT [dbo].[fn_FormatDollars](1588000)

<强>结果:

enter image description here

我在SQL 2005实例上写这个只是为了播放保存。