none
Converter numeros para letras

    Question

  • Tem como eu converter um campo de  numeros para letras e vice-versa atraves de uma select

    ou seja cada letra se refere a um numero

    Base:

    P E R N A M B U C O

    1 2  3 4  5  6  7  8 9  0

     

    Tabela

    produto  preco  (letra)

    lapis         1,25   P,EA

    Caneta     3,60  R,MO

     

    Grato

     

     

     

     

     

    Thursday, May 31, 2007 8:43 PM

Answers

  • Oi, Nomade.

     

         Você pode resolver esta questão criando duas user-defined-functions no SQL Server e depois utilizá-las nos seus selects passando o valor texto a ser convertido. Uma função poderia ser "dbo.MudarTextoParaNumero" e outra poderia ser "dbo.MudarNumeroParaTexto".

     

         Por exemplo, abaixo eu criei uma UDF chamada "dbo.MudarTextoParaNumero". Veja como ficou:

    Code Snippet

    CREATE FUNCTION dbo.MUDARTEXTOPARANUMERO  (@textoOriginal VARCHAR(30))
    RETURNS VARCHAR(30)
    AS
    BEGIN
    DECLARE @posicao int, @resultado varchar(30)
    SET @posicao = 1
    SET @resultado = ''
    WHILE @posicao <= DATALENGTH(@textoOriginal)
     BEGIN
      SET @resultado = CAST(@resultado +
      CASE SUBSTRING(@textoOriginal, @posicao, 1)
       WHEN 'P' THEN '1'
       WHEN 'E' THEN '2'
       WHEN 'R' THEN '3'
       WHEN 'N' THEN '4'
       WHEN 'A' THEN '5'
       WHEN 'M' THEN '6'
       WHEN 'B' THEN '7'
       WHEN 'U' THEN '8'
       WHEN 'C' THEN '9'
       WHEN 'O' THEN '0'
       ELSE SUBSTRING(@textoOriginal, @posicao, 1)
      END AS VARCHAR)
      SET @posicao = @posicao + 1
     END
       RETURN(@resultado)
    END

     

         Uma vez que esta função esteja criada você poderia rodar um select assim "SELECT dbo.MudarTextoParaNumero('PERNAMBUCO')" e obteria como resultado "1234567890". O truque desta função é simplesmente iterar pelo texto original passado e ir criando uma outra variável com o resultado da substituição das letras pelos números. De forma análoga, se você criar uma UDF chamada "dbo.MudarNumeroParaTexto" você teria que usar a mesma lógica, porém, trocando números por letras.

     

         É importante notar que eu setei tanto a entrada da função como um varchar de 30 posições assim como a saída. Mas você pode mudar isso conforme sua necessidade. A idéia aqui é só mostrar como seu problema pode ser resolvido utilizando UDFs no banco.

     

         Espero que isso o ajude.

     

    Abraço.

    Friday, June 01, 2007 3:37 AM

All replies

  •  

    Olá Nomade,

     

    Teria como exemplificar melhor??

     

    Abraço

    Thursday, May 31, 2007 11:43 PM
  • Oi, Nomade.

     

         Você pode resolver esta questão criando duas user-defined-functions no SQL Server e depois utilizá-las nos seus selects passando o valor texto a ser convertido. Uma função poderia ser "dbo.MudarTextoParaNumero" e outra poderia ser "dbo.MudarNumeroParaTexto".

     

         Por exemplo, abaixo eu criei uma UDF chamada "dbo.MudarTextoParaNumero". Veja como ficou:

    Code Snippet

    CREATE FUNCTION dbo.MUDARTEXTOPARANUMERO  (@textoOriginal VARCHAR(30))
    RETURNS VARCHAR(30)
    AS
    BEGIN
    DECLARE @posicao int, @resultado varchar(30)
    SET @posicao = 1
    SET @resultado = ''
    WHILE @posicao <= DATALENGTH(@textoOriginal)
     BEGIN
      SET @resultado = CAST(@resultado +
      CASE SUBSTRING(@textoOriginal, @posicao, 1)
       WHEN 'P' THEN '1'
       WHEN 'E' THEN '2'
       WHEN 'R' THEN '3'
       WHEN 'N' THEN '4'
       WHEN 'A' THEN '5'
       WHEN 'M' THEN '6'
       WHEN 'B' THEN '7'
       WHEN 'U' THEN '8'
       WHEN 'C' THEN '9'
       WHEN 'O' THEN '0'
       ELSE SUBSTRING(@textoOriginal, @posicao, 1)
      END AS VARCHAR)
      SET @posicao = @posicao + 1
     END
       RETURN(@resultado)
    END

     

         Uma vez que esta função esteja criada você poderia rodar um select assim "SELECT dbo.MudarTextoParaNumero('PERNAMBUCO')" e obteria como resultado "1234567890". O truque desta função é simplesmente iterar pelo texto original passado e ir criando uma outra variável com o resultado da substituição das letras pelos números. De forma análoga, se você criar uma UDF chamada "dbo.MudarNumeroParaTexto" você teria que usar a mesma lógica, porém, trocando números por letras.

     

         É importante notar que eu setei tanto a entrada da função como um varchar de 30 posições assim como a saída. Mas você pode mudar isso conforme sua necessidade. A idéia aqui é só mostrar como seu problema pode ser resolvido utilizando UDFs no banco.

     

         Espero que isso o ajude.

     

    Abraço.

    Friday, June 01, 2007 3:37 AM
  • Eduardo,

     

    Parabéns pelo exemplo, muito bem montado.

     

     

    Nômade, acredito que o exemplo postado pelo Eduardo resolva a sua dúvida.

    Friday, June 01, 2007 11:14 AM