如何将数字转换为带有千位分隔符的字符串?

问题描述 投票:0回答:1

Advantage Database Server 中是否有与

FORMAT()
功能 (SQL Server) 等效的功能? 例如,使用 T-SQL 我可以编写以下代码:

SELECT FORMAT(1000000, '#,0.00');

这将返回“1,000,000.00”。但ADS没有

FORMAT()
功能。 我尝试了
STR()
功能:

SELECT STR(1000000, 10, 2) FROM system.iota;

然而结果是“1000000.00”。

sql advantage-database-server
1个回答
0
投票

我不是 ADS 方面的专家,但我希望这个方法会有所帮助,这是使用非常基本的方法用 SQL 编写的,您应该能够轻松地在 ADS 中复制它

   --DECLARE @Number INT = 123456.89 
DECLARE @Number FLOAT = '123456.89' -- Input number as FLOAT

DECLARE @StringOutput VARCHAR(55) ='' -- Output string for formatted number

-- Load the Table with the individual Characters
CREATE TABLE #CharacterTable (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    SINGLECHAR CHAR(1)
)

DECLARE @cNumber NVARCHAR(255); -- Temporary variable to store converted number as string
DECLARE @Length INT; -- Length of the input number string
DECLARE @Index INT; -- Index used in looping through characters
DECLARE @Character CHAR(1); -- Individual character extracted from the input number
print @Number

-- Convert the input number to a string
SET @cNumber = CAST(CAST(@Number AS DECIMAL(38,2)) as VARCHAR(41)) 

print @cNumber
SET @Length = LEN(@cNumber);
SET @Index = 1;

-- Loop through the input string and insert individual characters into the table
WHILE @Index <= @Length
BEGIN
    SET @Character = SUBSTRING(@cNumber, @Index, 1);
    INSERT INTO #CharacterTable (SINGLECHAR) VALUES (@Character);
    SET @Index = @Index + 1;
END

-- Find if there is a decimal place
DECLARE @MYID INT
DECLARE @MYIDMin INT
SET @MYID = (SELECT MAX(ID) FROM #CharacterTable)
SET @MYIDMin = (SELECT MIN(ID) FROM #CharacterTable)

DECLARE @DOTID INT

-- Check if a decimal point exists
IF EXISTS (SELECT ID FROM #CharacterTable WHERE SINGLECHAR = '.')
BEGIN
    SET @DOTID = (SELECT ID FROM #CharacterTable WHERE SINGLECHAR = '.')
    WHILE (@DOTID <= @MYID) 
    BEGIN
        SET @Character = (SELECT SINGLECHAR FROM #CharacterTable WHERE ID=@MYID)
        SET @StringOutput = @Character + @StringOutput
        SET @MYID = @MYID - 1
    END
END
ELSE
BEGIN
    SET @StringOutput = '.00' -- If no decimal point found, append '.00' to the output string
END

DECLARE @Count INT = 0;

-- Attach the Decimal part and add comma separators
WHILE EXISTS (SELECT 1 FROM #CharacterTable WHERE ID=@MYID)
BEGIN
    SET @Character = (SELECT SINGLECHAR FROM #CharacterTable WHERE ID=@MYID)
    SET @StringOutput = @Character + @StringOutput
    SET @Count = @Count + 1    
    IF (@Count = 3 AND @MYID <> @MYIDMin)
    BEGIN
        SET @StringOutput = ',' + @StringOutput -- Add comma as a thousand separator every 3 digits
        SET @Count = 0
    END
    SET @MYID = @MYID - 1
END

Select @StringOutput -- Output the formatted number

DROP TABLE #CharacterTable -- Drop the temporary table after use
© www.soinside.com 2019 - 2024. All rights reserved.