Results 1 to 7 of 7

Thread: user define function

  1. #1

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2006
    Location
    Philippines
    Posts
    468

    user define function

    can i call a function within a function??

  2. #2
    Fanatic Member kaffenils's Avatar
    Join Date
    Apr 2004
    Location
    Norway
    Posts
    946

    Re: user define function

    Quote Originally Posted by mikee_phil
    can i call a function within a function??
    Yes you can.

  3. #3

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2006
    Location
    Philippines
    Posts
    468

    Re: user define function

    sql-server 2000 user define function... how??

  4. #4
    MS SQL Powerposter szlamany's Avatar
    Join Date
    Mar 2004
    Location
    Connecticut
    Posts
    18,263

    Re: user define function

    Like this:

    Code:
    Create Function dbo.Func1 (@InVal int)
    	Returns int
    As
    Begin
    	Return (@InVal * 2)
    End
    Go
    
    Create Function dbo.Func2 (@InVal int)
    	Returns int
    As
    Begin
    	Declare @TempVal int
    	Set @TempVal=dbo.Func1(@InVal)
    	Return (@TempVal * 100)
    End
    Go
    
    Select dbo.Func1(10)
    Select dbo.Func2(10)
    Shows this...

    Code:
                
    ----------- 
    20
    
    (1 row(s) affected)
    
                
    ----------- 
    2000
    
    (1 row(s) affected)

    *** Read the sticky in the DB forum about how to get your question answered quickly!! ***

    Please remember to rate posts! Rate any post you find helpful - even in old threads! Use the link to the left - "Rate this Post".

    Some Informative Links:
    [ SQL Rules to Live By ] [ Reserved SQL keywords ] [ When to use INDEX HINTS! ] [ Passing Multi-item Parameters to STORED PROCEDURES ]
    [ Solution to non-domain Windows Authentication ] [ Crazy things we do to shrink log files ] [ SQL 2005 Features ] [ Loading Pictures from DB ]

    MS MVP 2006, 2007, 2008

  5. #5

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2006
    Location
    Philippines
    Posts
    468

    Re: user define function

    i am getting an error incorrect error near the keyword 'set'
    by d way im creating the udf tha convert numeber in words
    VB Code:
    1. CREATE FUNCTION tens (@enter_tens int )  
    2. RETURNS varchar(20) AS  
    3. BEGIN
    4. declare @tens varchar(20), @exec_function varchar(20)
    5.  
    6.     if left(@enter_tens,1)=1
    7.         begin
    8.             set @tens = case @enter_tens   
    9.             when 11 then 'Eleven'
    10.             when 12 then 'Twelve'
    11.             when 13 then 'Thirteen'
    12.             when 14 then 'Fourteen'
    13.             when 15 then 'Fifteen'
    14.             when 16 then 'Sixteen'
    15.             when 17 then 'Seventeen'
    16.             when 18 then 'Eighteen'
    17.             when 19 then 'Nineteen'
    18.             end
    19.         end
    20.  
    21.     else
    22.         if @enter_tens=20
    23.             begin
    24.             set @tens='Twenty'
    25.             end
    26.    
    27.         else
    28.            
    29.                
    30.             [U][B]set @exec_function=   dbo.ones(right(@enter_tens,1)[/B][/U] --te error is in this lines
    31.        
    32.             set @tens= case
    33.                 when left(@enter_tens,1)= 2 then  'Twenty'+' ' + @exec_function
    34.                 when left(@enter_tens,1)=3 then 'Thirty'+' ' +@exec_function
    35.                 when left(@enter_tens,1)=4 then 'Forty'+' ' +@exec_function
    36.                 when left(@enter_tens,1)=5 then 'Fifty'+' ' +@exec_function
    37.                 when left(@enter_tens,1)=6 then 'Sixty'+' ' +@exec_function
    38.                 when left(@enter_tens,1)=7 then 'Seventy'+' ' +@exec_function
    39.                 when left(@enter_tens,1)=8 then 'Eighty'+' ' +@exec_function
    40.                 when left(@enter_tens,1)=9 then 'Ninety'+' ' +@exec_function           
    41.    
    42.                 end    
    43.    
    44.            
    45. return(@tens)
    46. END
    VB Code:
    1. CREATE FUNCTION ones (@enter_ones int)
    2. RETURNS nchar(10) AS  
    3. BEGIN
    4. declare @ones nchar(10)
    5.     set @ones= case @enter_ones
    6.         when 0 then 'k'
    7.         when 1 then 'One'
    8.         when 2 then 'Two'
    9.         when 3 then 'Three'
    10.         when 4 then 'Four'
    11.         when 5 then 'Five'
    12.         when 6 then 'Six'
    13.         when 7 then 'Seven'
    14.         when 8 then 'Eight'
    15.         when 9 then 'Nine'
    16.     end
    17. return(@ones)
    18.  
    19.  
    20.  
    21.  
    22. END
    VB Code:
    1. CREATE FUNCTION number_to_words  (@enter_no float)  
    2. RETURNS nchar(300)  AS  
    3. BEGIN
    4. declare @len_number int, @trim_number float,@converted nchar(300)
    5. set @trim_number= round(@enter_no,0)
    6. set @len_number=len(@enter_no)
    7. set @converted='k'
    8. --loop_till_len_zero:
    9.     if @len_number=9
    10.         begin
    11.         set @converted='mike'
    12.         end    
    13.        
    14.                      --not yet finnished
    15.         --not yet finnished
    16.         --not yet finnished
    17.  
    18. return(@converted)     
    19.  
    20.  
    21. END

  6. #6
    MS SQL Powerposter szlamany's Avatar
    Join Date
    Mar 2004
    Location
    Connecticut
    Posts
    18,263

    Re: user define function

    Seems to me like you are missing a closing parenthesis

    set @exec_function= dbo.ones(right(@enter_tens,1) --te error is in this lines

    should be

    set @exec_function= dbo.ones(right(@enter_tens,1)) --te error is in this lines

    btw - good luck! if you are so inclined post your complete function here - we would all love to see it...

    *** Read the sticky in the DB forum about how to get your question answered quickly!! ***

    Please remember to rate posts! Rate any post you find helpful - even in old threads! Use the link to the left - "Rate this Post".

    Some Informative Links:
    [ SQL Rules to Live By ] [ Reserved SQL keywords ] [ When to use INDEX HINTS! ] [ Passing Multi-item Parameters to STORED PROCEDURES ]
    [ Solution to non-domain Windows Authentication ] [ Crazy things we do to shrink log files ] [ SQL 2005 Features ] [ Loading Pictures from DB ]

    MS MVP 2006, 2007, 2008

  7. #7

    Thread Starter
    Hyperactive Member
    Join Date
    Feb 2006
    Location
    Philippines
    Posts
    468

    Re: user define function

    here's what ive come up
    CREATE FUNCTION ones (@enter_ones int)
    RETURNS nchar(10) AS
    BEGIN
    declare @ones varchar(10)
    set @ones= case @enter_ones
    when 0 then 'k'
    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 '
    end
    return (@ones)
    CREATE FUNCTION tens (@enter_tens int )
    RETURNS varchar(20) AS
    BEGIN
    declare @tens varchar(20), @exec_function varchar(20)
    if @enter_tens=0 -- for 0 e.g 100
    begin
    set @tens ='k'
    end
    if (@enter_tens >=1 )and (@enter_tens<=9) -- for below 9 e.g 205
    begin
    set @tens=dbo.ones(right(@enter_tens,1))
    end
    if (@enter_tens >=10 )and (@enter_tens<=19) --for below 19 e.g 113
    begin
    set @tens = case @enter_tens
    when 10 then 'Ten '
    when 11 then 'Eleven'
    when 12 then 'Twelve'
    when 13 then 'Thirteen'
    when 14 then 'Fourteen'
    when 15 then 'Fifteen'
    when 16 then 'Sixteen'
    when 17 then 'Seventeen'
    when 18 then 'Eighteen'
    when 19 then 'Nineteen'
    end
    end


    if (@enter_tens >19) -- for below 100 e.g 187
    begin
    set @exec_function= ltrim(dbo.ones(right(@enter_tens,1)))

    set @tens= case
    when left(@enter_tens,1)= 2 then 'Twenty'+' ' + @exec_function
    when left(@enter_tens,1)=3 then 'Thirty'+' ' +@exec_function
    when left(@enter_tens,1)=4 then 'Forty'+' ' +@exec_function
    when left(@enter_tens,1)=5 then 'Fifty'+' ' +@exec_function
    when left(@enter_tens,1)=6 then 'Sixty'+' ' +@exec_function
    when left(@enter_tens,1)=7 then 'Seventy'+' ' +@exec_function
    when left(@enter_tens,1)=8 then 'Eighty'+' ' +@exec_function
    when left(@enter_tens,1)=9 then 'Ninety'+' ' +@exec_function

    end

    end

    return (@tens)
    END
    CREATE FUNCTION hundreds (@enter_hundreds int)
    RETURNS varchar (15) AS
    BEGIN
    declare @hundreds varchar (17)
    set @hundreds= case left(@enter_hundreds,1)
    when 0 then 'k'
    else

    rtrim(dbo.ones(left(@enter_hundreds,1)))+' Hundred '
    end

    return (@hundreds)
    end
    CREATE FUNCTION number_to_words (@enter_no numeric)
    RETURNS varchar(300) AS
    BEGIN
    declare @len_number int, @trim_number float,@converted varchar(300)
    set @trim_number= round(ltrim(rtrim(@enter_no)),0)
    set @len_number=len(@enter_no)
    set @converted='k'
    if @len_number=1
    begin
    if @trim_number = 0
    --begin
    set @converted= 'Zero'
    --end
    else
    set @converted=ltrim(rtrim(dbo.ones(@enter_no)))
    end

    if @len_number=2
    begin
    set @converted= rtrim(ltrim(dbo.tens(@enter_no)))
    end

    if @len_number=3
    begin
    set @converted=replace( ltrim(dbo.hundreds(left(@enter_no,1)))+ rtrim(dbo.tens(right(@enter_no,2))),'k','')
    end

    if @len_number=4
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,2),1)))+rtrim(dbo.tens(right(right(@enter_no,3),2))) +@converted,'k','')
    set @converted= replace(ltrim(rtrim(dbo.ones((left(@enter_no,1)))))+' Thousand '+@converted,'k','')
    end

    if @len_number=5
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,4),1)))+rtrim(dbo.tens(right(right(@enter_no,3),2))) +@converted,'k','')
    set @converted= replace(ltrim(rtrim(dbo.tens((left(@enter_no,2)))))+' Thousand '+@converted,'k','')
    end

    if @len_number=6
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,4),1)))+rtrim(dbo.tens(right(right(@enter_no,3),2))) +@converted,'k','')
    set @converted= replace(ltrim(dbo.hundreds(left(@enter_no,1)))+rtrim(dbo.tens(right(left(@enter_no,3),2)))+' Thousand '+@converted,'k','')
    end

    if @len_number=7
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,5),1)))+rtrim(dbo.tens(right(right(@enter_no,3),2))) +@converted,'k','')
    if right(left(@enter_no,6),3)='000'
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,2),1)))+rtrim(dbo.tens(right(left(@enter_no,4),2)))+ @converted,'k','')
    end
    else
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,2),1)))+rtrim(dbo.tens(right(left(@enter_no,4),2)))+ ' Thousand '+@converted,'k','')
    end
    set @converted= replace(ltrim(rtrim(dbo.ones(left(@enter_no,1))))+' Million '+@converted,'k','')



    end

    if @len_number=8
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,6),1)))+rtrim(dbo.tens(right(right(@enter_no,3),2))) +@converted,'k','')

    if right(left(@enter_no,6),3)='000'
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,3),1)))+rtrim(dbo.tens(right(left(@enter_no,6),2)))+ @converted,'k','')
    end
    else
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,3),1)))+rtrim(dbo.tens(right(left(@enter_no,5),2)))+ ' Thousand '+@converted,'k','')
    end
    set @converted= replace(ltrim(rtrim(dbo.tens(right(left(@enter_no,2),2))))+' Million '+@converted,'k','')




    end

    if @len_number=9
    begin

    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,7),1)))+rtrim(dbo.tens(right(right(@enter_no,3),2))) +@converted,'k','')
    if right(left(@enter_no,6),3)='000'
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,4),1)))+rtrim(dbo.tens(right(left(@enter_no,6),2)))+ @converted,'k','')
    end
    else
    begin
    set @converted= replace(ltrim(dbo.hundreds(right(left(@enter_no,4),1)))+rtrim(dbo.tens(right(left(@enter_no,6),2)))+ ' Thousand '+@converted,'k','')
    end
    set @converted= replace(ltrim(dbo.hundreds(left(@enter_no,1)))+rtrim(dbo.tens(right(left(@enter_no,3),2)))+' Million '+@converted,'k','')


    end





    return( rtrim(@converted))


    END
    up to 999 million only
    select dbo.number_to_words('655003441')

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width