CREATE function [dbo].[Fn_Indian_Money_Format] ( @amount MONEY ) RETURNS VARCHAR(50) AS BEGIN DECLARE @charMoney VARCHAR(50), @RemainingChar VARCHAR(50), @QuoteChar VARCHAR(50) DECLARE @LenStr INT, @val INT, @index INT SELECT @charMoney = CONVERT(VARCHAR(50),@amount) SELECT @QuoteChar = SUBSTRING(@charMoney,1,CHARINDEX('.',@charMoney)-1) SELECT @val = LEN(@charMoney) - LEN(@QuoteChar) SELECT @RemainingChar = SUBSTRING(@charMoney,CHARINDEX('.',@charMoney),@val) SELECT @LenStr = LEN(@QuoteChar) SET @index = 3 WHILE (@LenStr > @index) BEGIN SET @QuoteChar = (SELECT STUFF(@QuoteChar, (@LenStr-@index) + 1, 0, ',')) SET @index = @index + 2 END RETURN isnull(left(@QuoteChar + @RemainingChar, len(@QuoteChar) + len(@RemainingChar)-3),0)END
select dbo.fn_Format_Money_Indian (1000) -- Result is 1,000select dbo.fn_Format_Money_Indian (10000) -- Result is 10,000select dbo.fn_Format_Money_Indian (100000) -- Result is 1,00,000select dbo.fn_Format_Money_Indian (1000000) -- Result is 10,00,000
select dbo.fn_Format_Money_Indian (-10000) -- Result is -,10,000 But Reqired Format is -10,000select dbo.fn_Format_Money_Indian (-1000000) -- Result is -,10,00,000 But Reqired Format is -10,00,000select dbo.fn_Format_Money_Indian (-100000000) -- Result is -,10,00,00,000 But Reqired Format is -10,00,00,000
CREATE function [dbo].[Fn_Indian_Money_Format] ( @amount MONEY ) RETURNS VARCHAR(50) AS BEGIN DECLARE @charMoney VARCHAR(50), @RemainingChar VARCHAR(50), @QuoteChar VARCHAR(50) DECLARE @LenStr INT, @val INT, @index INT Set @charMoney = CONVERT(VARCHAR(50),ABS(@amount)) Set @QuoteChar = SUBSTRING(@charMoney,1,CHARINDEX('.',@charMoney)-1) Set @val = LEN(@charMoney) - LEN(@QuoteChar) Set @RemainingChar = SUBSTRING(@charMoney,CHARINDEX('.',@charMoney),@val) Set @LenStr = LEN(@QuoteChar) SET @index = 3 WHILE (@LenStr > @index) BEGIN SET @QuoteChar = (SELECT STUFF(@QuoteChar, (@LenStr-@index) + 1, 0, ',')) SET @index = @index + 2 END RETURN CASE SIGN(@amount) When -1 then '-' END+ isnull(left(@QuoteChar + @RemainingChar, len(@QuoteChar) + len(@RemainingChar)-3),0)END
DECLARE @amount MONEYSET @amount = -3211987654321.10 -- [-3,210,987,654,321.10] ---------------------------------------------------------------------------------------SELECT FormattedAmount = CASE SIGN(@amount) WHEN -1 THEN '-' ELSE '' END + CASE WHEN vl < 4 THEN AmountAsString WHEN vl < 6 THEN STUFF(AmountAsString,vl-2,0,',') WHEN vl < 8 THEN STUFF(STUFF(AmountAsString,vl-2,0,','),vl-4,0,',') WHEN vl < 10 THEN STUFF(STUFF(STUFF(AmountAsString,vl-2,0,','),vl-4,0,','),vl-6,0,',') WHEN vl < 12 THEN STUFF(STUFF(STUFF(STUFF(AmountAsString,vl-2,0,','),vl-4,0,','),vl-6,0,','),vl-8,0,',') WHEN vl < 14 THEN STUFF(STUFF(STUFF(STUFF(STUFF(AmountAsString,vl-2,0,','),vl-4,0,','),vl-6,0,','),vl-8,0,','),vl-10,0,',') ELSE NULL ENDFROM (SELECT vl = CAST(1+LOG10(ABS(@amount)) AS INT), AmountAsString = CONVERT(VARCHAR(50),ABS(@amount))) d ---------------------------------------------------------------------------------------SELECT FormattedAmount = CASE SIGN(@amount) WHEN -1 THEN '-' ELSE '' END + COALESCE(x5.StrAmount, x4.StrAmount, x3.StrAmount, x2.StrAmount, x1.StrAmount, d.StrAmount) FROM (SELECT vl = CAST(1+LOG10(ABS(@amount)) AS INT), StrAmount = CONVERT(VARCHAR(50),ABS(@amount))) d CROSS APPLY (SELECT StrAmount = CASE WHEN d.vl > 3 THEN STUFF( d.StrAmount,vl- 2,0,',') END) x1CROSS APPLY (SELECT StrAmount = CASE WHEN d.vl > 5 THEN STUFF(x1.StrAmount,vl- 4,0,',') END) x2CROSS APPLY (SELECT StrAmount = CASE WHEN d.vl > 7 THEN STUFF(x2.StrAmount,vl- 6,0,',') END) x3CROSS APPLY (SELECT StrAmount = CASE WHEN d.vl > 9 THEN STUFF(x3.StrAmount,vl- 8,0,',') END) x4CROSS APPLY (SELECT StrAmount = CASE WHEN d.vl > 11 THEN STUFF(x4.StrAmount,vl-10,0,',') END) x5---------------------------------------------------------------------------------------