rajnidas
Yak Posting Veteran
97 Posts |
Posted - 2013-10-23 : 03:03:09
|
hi, everybody, i am facing with spellnumber when i try to execute ,kindly i need helpi have given below the sql coding USE [PSBC_DB1]GO/****** Object: UserDefinedFunction [dbo].[fn_spellNumber] Script Date: 10/22/2013 4:35:01 PM ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO---SELECT DBO.fn_spellNumber ('22,33,74,555.29','L',1,1) ---SELECT DBO.fn_spellNumber ('22,33,84,555.29','L',1,2) --Twenty Two Crore Twenty Three Lakh Thirty Three Thousand Four Hundred And Fourty Five Fifty Five CentsALTER FUNCTION [dbo].[fn_spellNumber](@SpellNumber varchar(100), @SpellType VARCHAR(10) = 'L', @AddComma BIT = 1, @flag int =1) RETURNS VARCHAR(1000) bEGIN DECLARE @Res VARCHAR(MAX) DECLARE @TmpRes VARCHAR(MAX) DECLARE @CurrentNumber int DECLARE @PrevNumber int DECLARE @Comma VARCHAR(1) DECLARE @Loopvar int DECLARE @VarSpellNumber VARCHAR(50) --****************** declare @v_SpellNumber decimal declare @strCents varchar(100) declare @strnum varchar(100) declare @intIndex integer select @SpellNumber=replace(@SpellNumber,',','') select @v_SpellNumber = convert(decimal,@SpellNumber) Select @strnum = Cast(@SpellNumber as varchar(100)) Select @intIndex = CharIndex('.', @strnum) --select @v_SpellNumber = convert(int,convert(decimal,@SpellNumber)) ---select @v_SpellNumber=substring(@SpellNumber,1,CharIndex('.', @SpellNumber)-1) select @strCents = '' If @intIndex > 0 begin Select @strCents = dbo.fConvertTens(Right(@strnum, Len(@strnum) - @intIndex)) Select @strnum = SubString(cast(@strnum as varchar), 1, Len(@strnum) - 3) If Len(@strCents) > 0 Select @strCents = @strCents + ' Cents' end--******************* IF @v_SpellNumber < 0 SELECT @SpellNumber = @v_SpellNumber * -1 SELECT @VarSpellNumber = @v_SpellNumber SELECT @Loopvar = 1 SELECT @Res = '' SELECT @Comma = CASE @AddComma WHEN 1 THEN ',' ELSE '' END WHILE LTRIM(RTRIM(@VarSpellNumber)) <> '' BEGIN SELECT @CurrentNumber = NULL SELECT @PrevNumber = NULL SELECT @TmpRes = '' SELECT @CurrentNumber = SUBSTRING(@VarSpellNumber,LEN(@VarSpellNumber),1) IF LEN(@VarSpellNumber) > 1 SELECT @PrevNumber = SUBSTRING(@VarSpellNumber,LEN(@VarSpellNumber)-1,1) IF (@Loopvar = 2 AND @SpellType = 'L') OR (@Loopvar%2=0 AND @SpellType ='M') SELECT @PrevNumber = NULL IF @PrevNumber IS NULL OR @PrevNumber <> 1 BEGIN SELECT @TmpRes = CASE @CurrentNumber WHEN 1 THEN 'One' WHEN 2 THEN 'Two' WHEN 3 THEN 'Three' WHEN 4 THEN 'Four' WHEN 5 THEN 'Five' WHEN 6 THEN 'Six' WHEN 7 THEN 'Seven' WHEN 8 THEN 'Eight' WHEN 9 THEN 'Nine' WHEN 0 THEN '' END END IF @PrevNumber = 1 BEGIN SELECT @TmpRes = CASE CONVERT(INT,CONVERT(VARCHAR(1),@PrevNumber) + CONVERT(VARCHAR(1),@CurrentNumber)) WHEN 10 THEN 'Ten' WHEN 11 THEN 'Eleven' WHEN 12 THEN 'Twelve' WHEN 13 THEN 'Thirteen' WHEN 14 THEN 'Fourteen' WHEN 15 THEN 'Fiveteen' WHEN 16 THEN 'Sixteen' WHEN 17 THEN 'Seventeen' WHEN 18 THEN 'Eighteen' WHEN 19 THEN 'Nineteen' END END IF @PrevNumber > 1 BEGIN SELECT @TmpRes = CASE @PrevNumber WHEN 2 THEN 'Twenty' WHEN 3 THEN 'Thirty' WHEN 4 THEN 'Fourty' WHEN 5 THEN 'Fifty' WHEN 6 THEN 'Sixty' WHEN 7 THEN 'Seventy' WHEN 8 THEN 'Eighty' WHEN 9 THEN 'Ninety' WHEN 0 THEN '' END + ' ' + @TmpRes END SELECT @TmpRes = LTRIM(RTRIM(@TmpRes)) IF @SpellType ='L' AND (@TmpRes <> '' OR ( @Loopvar = 5 AND CONVERT(INT,@VarSpellNumber)>0)) BEGIN SELECT @TmpRes = @TmpRes + ' ' + CASE @Loopvar WHEN 2 THEN 'Hundred' WHEN 3 THEN 'Thousand' + @Comma WHEN 4 THEN 'Lakh' + @Comma WHEN 5 THEN 'Crore' + @Comma ELSE '' END END IF @SpellType ='M' AND (@TmpRes <> '' OR ( @Loopvar%2 = 1 AND CONVERT(INT,SUBSTRING(@VarSpellNumber,LEN(@VarSpellNumber)-2,1))>0)) BEGIN SELECT @TmpRes = @TmpRes + ' ' + CASE @Loopvar WHEN 2 THEN 'Hundred' WHEN 3 THEN 'Thousand' + @Comma WHEN 4 THEN 'Hundred' WHEN 5 THEN 'Million' + @Comma WHEN 6 THEN 'Hundred' WHEN 7 THEN 'Billion' + @Comma WHEN 8 THEN 'Hundred' WHEN 9 THEN 'Trillion' + @Comma WHEN 10 THEN 'Hundred' WHEN 11 THEN 'Quadrillion' + @Comma WHEN 12 THEN 'Hundred' WHEN 13 THEN 'Quintillion' + @Comma ELSE '' END END IF @Loopvar = 1 AND LEN(@VarSpellNumber) > 2 IF CONVERT(INT,SUBSTRING(CONVERT(VARCHAR(50),@v_SpellNumber),LEN(@VarSpellNumber)-1,2)) > 0 SELECT @TmpRes = 'And ' + @TmpRes IF @TmpRes <> '' SELECT @Res = @TmpRes + ' ' + @Res IF (@Loopvar = 2 AND @SpellType = 'L') or (@Loopvar%2=0 AND @SpellType ='M') SELECT @VarSpellNumber = SUBSTRING(@VarSpellNumber,1,LEN(@VarSpellNumber)-1) ELSE IF LEN(@VarSpellNumber) = 1 SELECT @VarSpellNumber = SUBSTRING(@VarSpellNumber,1,LEN(@VarSpellNumber)-1) ELSE SELECT @VarSpellNumber = SUBSTRING(@VarSpellNumber,1,LEN(@VarSpellNumber)-2) SELECT @Loopvar = @Loopvar + 1 IF @Loopvar = 6 AND @SpellType ='L' SELECT @Loopvar = 2 END -----*******************************************************DECLARE @REV VARCHAR(MAX);declare @v_firstsixty varchar(max);declare @v_aftersixty varchar(max);declare @Res1 varchar(500);declare @v_len int;declare @v_f2 int;SELECT @Res = replace(ISNULL(@Res,''),',','')set @v_len= LEN(@Res + @strCents)if @flag = 1 SET @REV = @Res + @strCents set @Res1 = (@REV) if @v_len <= 60 begin SET @REV = SUBSTRING(@Res + @strCents ,1,60) set @Res1 = (@REV) end else begin SET @REV = REVERSE(SUBSTRING(@Res + @strCents,1,60)) set @v_firstsixty=REVERSE(SUBSTRING(@REV,CHARINDEX(' ',@REV)+1,LEN(@REV))) set @Res1 = @v_firstsixty endif @flag = 2 begin select @REV = REVERSE(SUBSTRING(@Res+@strCents,1,60)) select @v_f2= len(@rev)--len(REVERSE(SUBSTRING(@REV,CHARINDEX(' ',@REV)+1,60))) --set @v_aftersixty=SUBSTRING(@Res + @strCents,60,@v_len)--LEN(@StrFinal + ' '+ @strCents)) select @v_aftersixty=SUBSTRING(@Res+@strCents,@v_f2+1,LEN(@Res+@strCents)) set @Res1 = @v_aftersixty end-----*******************************************************SELECT @Res1 = LTRIM ( RTRIM(@Res1 )) RETURN @Res1END ---SELECT DBO.fn_spellNumber ('22,33,74,555.29','L',1,1) ---SELECT DBO.fn_spellNumber ('22,33,84,555.29','L',1,2)when we execute first one .getting answer like this -Twenty Two Crore Thirty Three Lakh Seventy Four Thousand Fivwhen we execute second one ---getting answer like this -- e Hundred And Fifty Five Twenty Nine Centswe want result 1): before the space limit 60 character: Twenty Two Crore Thirty Three Lakh Seventy Four Thousand 2)after the character : Hundred And Fifty Five Twenty Nine Centsresult would be round character figure---------------------any one pls reply |
|