none
Separar números de letras RRS feed

  • Pergunta

  • Pessoal,

    Um campo da minha base tem o seguinte valor

    4541278SJX
    214WX547

    Preciso separar esses valores para posterior cadastros, como faço?

    segunda-feira, 5 de novembro de 2012 16:09

Respostas

  • Acredito que um bom meio seja a utilização de funções, como a seguir. Porém, se você precisar disso uma vez só, poderia executar um Update na tabela com estas funções.

    Segue exemplo completo:

    Create Function fnc_RetornaNumeros (@Campo VarChar(100)) returns VarChar(100) as
    Begin
      Declare @Texto VarChar(100) = '', @Caracter Char(01)
      
      While Len(@Campo) > 0
      Begin
        Set @Caracter = Left(@Campo, 1)
        if @Caracter in ('0','1','2','3','4','5','6','7','8','9','10')
          Set @Texto = @Texto + @Caracter
    
        Set @Campo = Right(@Campo, Len(@Campo) - 1)
      End
    
      Return (@Texto)
    End
    
    Create Function fnc_RetornaLetras (@Campo VarChar(100)) returns VarChar(100) as
    Begin
      Declare @Texto VarChar(100) = '', @Caracter Char(01)
      
      While Len(@Campo) > 0
      Begin
        Set @Caracter = Left(@Campo, 1)
        if @Caracter not in ('0','1','2','3','4','5','6','7','8','9','10')
          Set @Texto = @Texto + @Caracter
    
        Set @Campo = Right(@Campo, Len(@Campo) - 1)
      End
    
      Return (@Texto)
    End
    
    -- Testes
    Create Table #Teste (Codigo VarChar(100))
    Insert Into #Teste Values ('4541278SJX'), ('214WX547')
    
    Select
      Codigo,
      Codigo_Numeros = dbo.fnc_RetornaNumeros(Codigo),
      Codigo_Letras  = dbo.fnc_RetornaLetras(Codigo)
    From
      #Teste


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Vitor Mendes segunda-feira, 5 de novembro de 2012 17:10
    • Marcado como Resposta Bruno.Costa segunda-feira, 5 de novembro de 2012 17:46
    segunda-feira, 5 de novembro de 2012 17:00
    Moderador

Todas as Respostas

  • Bruno,

    Acho que não ficou muito claro, você pretender utilizar estes valores no cadastro de algo, mais oque seria separar os valores ?

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 5 de novembro de 2012 16:17
  • Quer separar letras e números?

    Existem outros caracteres, como acentos?


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.


    segunda-feira, 5 de novembro de 2012 16:21
    Moderador
  • Roberson,

    Isso preciso separar as letras dos números.

    Ex:

    >> 4541278SJX

    >4541278
    >SJX

    segunda-feira, 5 de novembro de 2012 16:27
  • Mas existem outros caracteres além de números e letras?

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 5 de novembro de 2012 16:39
    Moderador
  • E outra coisa: no exemplo que você deu (4541278SJX), você quer fazer o que com as letras e fazer o que com os números?

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 5 de novembro de 2012 16:43
    Moderador
  • Roberson...

    Apenas letras e números no campo.

    Eu preciso separar letras e números, pois existe a necessidade de trabalhar com os valores separados, cadastrar em locais diferentes, exibir em relatórios e etc..

    segunda-feira, 5 de novembro de 2012 16:44
  • Acredito que um bom meio seja a utilização de funções, como a seguir. Porém, se você precisar disso uma vez só, poderia executar um Update na tabela com estas funções.

    Segue exemplo completo:

    Create Function fnc_RetornaNumeros (@Campo VarChar(100)) returns VarChar(100) as
    Begin
      Declare @Texto VarChar(100) = '', @Caracter Char(01)
      
      While Len(@Campo) > 0
      Begin
        Set @Caracter = Left(@Campo, 1)
        if @Caracter in ('0','1','2','3','4','5','6','7','8','9','10')
          Set @Texto = @Texto + @Caracter
    
        Set @Campo = Right(@Campo, Len(@Campo) - 1)
      End
    
      Return (@Texto)
    End
    
    Create Function fnc_RetornaLetras (@Campo VarChar(100)) returns VarChar(100) as
    Begin
      Declare @Texto VarChar(100) = '', @Caracter Char(01)
      
      While Len(@Campo) > 0
      Begin
        Set @Caracter = Left(@Campo, 1)
        if @Caracter not in ('0','1','2','3','4','5','6','7','8','9','10')
          Set @Texto = @Texto + @Caracter
    
        Set @Campo = Right(@Campo, Len(@Campo) - 1)
      End
    
      Return (@Texto)
    End
    
    -- Testes
    Create Table #Teste (Codigo VarChar(100))
    Insert Into #Teste Values ('4541278SJX'), ('214WX547')
    
    Select
      Codigo,
      Codigo_Numeros = dbo.fnc_RetornaNumeros(Codigo),
      Codigo_Letras  = dbo.fnc_RetornaLetras(Codigo)
    From
      #Teste


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Vitor Mendes segunda-feira, 5 de novembro de 2012 17:10
    • Marcado como Resposta Bruno.Costa segunda-feira, 5 de novembro de 2012 17:46
    segunda-feira, 5 de novembro de 2012 17:00
    Moderador