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”。
我不是 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