Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/03/2012, 13:29
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Convertir cantidad a letras SQL SERVER 2005

bien dicen el que busca encuentra :), hice una busqueda en google "convert number to word sql server" y aparecen varios resultados que funcionan por ejemplo este:



Código SQL:
Ver original
  1. DECLARE @NUMBER INT
  2.  SET @NUMBER=10125450
  3.    
  4.  DECLARE @RESULT VARCHAR(100), @word VARCHAR(100), @GROUP VARCHAR(100)  
  5.  DECLARE @i INT, @j INT, @m INT, @digit VARCHAR(2), @cn VARCHAR(20)  
  6.  
  7.  IF @NUMBER = 0 print 'Zero'  
  8.  
  9.  SELECT @RESULT = '', @word = '', @GROUP = ''  
  10.    
  11.  SET @cn = @NUMBER  
  12.  SET @cn = REPLACE(@cn,',','')  
  13.  SET @m = LEN(@cn) % 3  
  14.  IF @m > 0 SET @cn = REPLICATE('0',3-@m) + @cn    -- Left pad with zeroes to a multiple of 3  
  15.  
  16.  SET @i = 1  
  17.  SET @j = LEN(@cn)-@i+1  
  18.  SET @m = @i % 3  
  19.  WHILE @i <= LEN(@cn)  
  20.  BEGIN  
  21.   -- @i is 1 origin index into numeric string while @m = @i modulo 3  
  22.   -- If the middle digit of each group of 3 is a '1' then this is a 'Ten' or a '...teen'  
  23.   IF @m = 2 AND SUBSTRING(@cn,@i,1) = '1'  
  24.   BEGIN  
  25.    SET @digit = SUBSTRING(@cn,@i,2)  
  26.    -- Skip rightmost digit of 3 if processing teens  
  27.    SET @i = @i + 1  
  28.   END  
  29.   ELSE  
  30.    SET @digit = SUBSTRING(@cn,@i,1)  
  31.  
  32.   SET @word =  
  33.   CASE  
  34.    WHEN @m = 0 THEN         -- Rightmost digit of group of 3  
  35.     CASE @digit  
  36.      WHEN '0' THEN ''  
  37.      WHEN '1' THEN 'One'  
  38.      WHEN '2' THEN 'Two'  
  39.      WHEN '3' THEN 'Three'  
  40.      WHEN '4' THEN 'Four'  
  41.      WHEN '5' THEN 'Five'  
  42.      WHEN '6' THEN 'Six'  
  43.      WHEN '7' THEN 'Seven'  
  44.      WHEN '8' THEN 'Eight'  
  45.      WHEN '9' THEN 'Nine'  
  46.     END +  
  47.     CASE  
  48.      WHEN (@GROUP <> '' OR @digit <> '0') AND (@j+2) / 3 = 2 THEN ' Thousand'  
  49.      WHEN (@GROUP <> '' OR @digit <> '0') AND (@j+2) / 3 = 3 THEN ' Million'  
  50.      WHEN (@GROUP <> '' OR @digit <> '0') AND (@j+2) / 3 = 4 THEN ' Billion'  
  51.      ELSE ''  
  52.     END  
  53.    WHEN LEN(@digit) = 2 THEN       -- Special case when middle digit is a '1'  
  54.     CASE @digit  
  55.      WHEN '10' THEN 'Ten'  
  56.      WHEN '11' THEN 'Eleven'  
  57.      WHEN '12' THEN 'Twelve'  
  58.      WHEN '13' THEN 'Thirteen'  
  59.      WHEN '14' THEN 'Fourteen'  
  60.      WHEN '15' THEN 'Fifteen'  
  61.      WHEN '16' THEN 'Sixteen'  
  62.      WHEN '17' THEN 'Seventeen'  
  63.      WHEN '18' THEN 'Eighteen'  
  64.      WHEN '19' THEN 'Nineteen'  
  65.     END +  
  66.     CASE  
  67.      WHEN (@GROUP <> '' OR @digit <> '00') AND (@j+2) / 3 = 2 THEN ' Thousand'  
  68.      WHEN (@GROUP <> '' OR @digit <> '00') AND (@j+2) / 3 = 3 THEN ' Million'  
  69.      WHEN (@GROUP <> '' OR @digit <> '00') AND (@j+2) / 3 = 4 THEN ' Billion'  
  70.      ELSE ''  
  71.     END  
  72.    WHEN @m = 2 THEN         -- Middle digit of group of 3  
  73.     CASE @digit  
  74.      WHEN '2' THEN 'Twenty'  
  75.      WHEN '3' THEN 'Thirty'  
  76.      WHEN '4' THEN 'Forty'  
  77.      WHEN '5' THEN 'Fifty'  
  78.      WHEN '6' THEN 'Sixty'  
  79.      WHEN '7' THEN 'Seventy'  
  80.      WHEN '8' THEN 'Eighty'  
  81.      WHEN '9' THEN 'Ninety'  
  82.      ELSE ''  
  83.     END  
  84.    WHEN @m = 1 THEN         -- Leftmost digit of group of 3  
  85.     CASE @digit  
  86.      WHEN '0' THEN ''  
  87.      WHEN '1' THEN 'One'  
  88.      WHEN '2' THEN 'Two'  
  89.      WHEN '3' THEN 'Three'  
  90.      WHEN '4' THEN 'Four'  
  91.      WHEN '5' THEN 'Five'  
  92.      WHEN '6' THEN 'Six'  
  93.      WHEN '7' THEN 'Seven'  
  94.      WHEN '8' THEN 'Eight'  
  95.      WHEN '9' THEN 'Nine'  
  96.     END +  
  97.     CASE WHEN @digit <> '0' THEN ' Hundred' ELSE '' END  
  98.   END  
  99.  
  100.   SET @GROUP = @GROUP + RTRIM(@word)      -- Group value  
  101.  
  102.   IF @word <> ''  
  103.   BEGIN  
  104.    DECLARE @prefix VARCHAR(20)  
  105.    IF CHARINDEX(' ',@word) > 0 SET @prefix = LEFT(@word,CHARINDEX(' ',@word)) ELSE SET @prefix = @word  
  106.    IF RIGHT(@RESULT,2) = 'ty' AND @prefix IN ('One','Two','Three','Four','Five','Six','Seven','Eight','Nine')  
  107.     SET @RESULT = @RESULT + '-' + LTRIM(@word)  
  108.    ELSE  
  109.     SET @RESULT = @RESULT + ' ' + LTRIM(@word)  
  110.   END  
  111.   -- The following needs to be outside of a UDF to work:  
  112.   --IF @debug = 1 SELECT @cn as 'Number', @i as '@i', @j as '@j', @m as '@m', @digit as '@digit', CAST(replace(@group,' ','`') AS CHAR(30)) as '@group', @word as '@word', @result as '@result'  
  113.   SET @i = @i + 1  
  114.   SET @j = LEN(@cn)-@i+1  
  115.   SET @m = @i % 3  
  116.   IF @m = 1 SET @GROUP = ''        -- Clear group value when starting a new one  
  117.  
  118.  END  
  119.  
  120.  IF @RESULT = '' SET @RESULT = '0'  
  121.  print @RESULT

Aqui el link de donde saque ese codigo

http://www.sqlservercentral.com/Foru...134-149-1.aspx

Nada mas cambia las palabras de ingles al español y listo tienes tu funcion :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me