I often find it useful to have the query results be used as a report, rather than going through the process of creating a report is SSRS or another tool. One issue I constantly have is displaying numeric data in an easily readable format directly from sql. So I created a function specifically for this. This function converts numeric data to text, rounds to specific decimal places, and right justifies to a specific number of characters so that a column of numbers all line up.
CREATE FUNCTION [dbo].[dbaudf_FormatNumber]
(
@Value float
,@RightAlignSize INT
,@DecimalPlaces INT
)
RETURNS varchar(50)
AS
BEGIN
/*********************************************************
** Function dbaudf_FormatNumber
** Written by Steve Ledridge, Getty Images
** June 24, 2010
**
** This function is used to format numeric values it a text output
** by adding commas and right justifying.
**
***************************************************************/
-- ======================================================================================
-- Revision History
-- Date Author Desc
-- ========== ==================== =============================================
-- 06/24/2010 Steve Ledridge New process
-- ======================================================================================
/*
EXAMPLE USAGE:
DECLARE @value Float
SET @value = '12345.3456'
SELECT [dbo].[dbaudf_FormatNumber](@value,20,2)
GO
*/
SET @Value = ROUND(@Value,@DecimalPlaces)
DECLARE @FormatNumber varchar(50)
DECLARE @Pointer INT
SET @FormatNumber = CONVERT(varchar(50), CAST(ABS(@Value) AS money), 1)
SET @Pointer = CHARINDEX('.',@FormatNumber)
if @pointer = 0
BEGIN
SET @pointer = len(@FormatNumber) + 1
SET @FormatNumber = @FormatNumber + '.'
END
SET @FormatNumber = @FormatNumber + REPLICATE('0', @DecimalPlaces )
SET @FormatNumber = CASE
WHEN @DecimalPlaces = 0
THEN LEFT(@FormatNumber, @Pointer - 1 )
ELSE LEFT(@FormatNumber, @Pointer + @DecimalPlaces )
END
IF SIGN(@Value) = -1
SET @FormatNumber = '(' + @FormatNumber + ')'
if @RightAlignSize < @Pointer + @DecimalPlaces
SET @RightAlignSize = @Pointer + @DecimalPlaces
RETURN RIGHT(REPLICATE(' ', @RightAlignSize)+@FormatNumber,@RightAlignSize)
END
GO
No comments:
Post a Comment