Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fells

[Resolvido] extrair parte de um número

Recommended Posts

Boa tarde galera, minha duvida é a seguinte:

 

Tenho uma tabela (SQL Server) que tem seus ID's começados pelo ano atual seguido de um número, exemplo: 201100001; 201100002; 201100003 .... 2011000153.

 

Queria saber como pegar esse começo do número (2011) para fazer uma comparação com o ano do sistema. Tenho uma rotina no ASP que geral o proximo numero ID e insere na tabela junto com os dados que o usuário digitou no formulario.

Tentei criar uma variavel e usar o left(campo,4) mais ele só exibe os 4 primeiros numero e não "extrai" eles para que eu compare.

 

Precisava disso pois tenho em mente fazer um IF que seja para fazer uma comparação. Se o proximo ID gerado tiver começo 2011...... e o ano tbm for 2011 ele gera o proximo número (exemplo 2011000154). Se não, se o proximo ID gerado for começado por 2011...... e o ano mudou para 2012, ele gera uma "nova sequencia" começada pelo mesmo "valor do ano" e recomeça do 00001: exemplo 201200001

 

Me ajudem por favor!

Vlwss pessoal

Compartilhar este post


Link para o post
Compartilhar em outros sites

use a função LEFT()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então xanburzum eu fiz isso como disse na 1ª postagem:

 

If (Year(date) = ultData) Then
frase = "Eh Igual"
else
frase = "Eh diferente"
End if

 

Só que quando peço pra ele dar uma msg:

 

<font size = 3><b><div align="center">Ultimo Registro <font color = "#FF0000"><%response.write frase%></font></div><br></b></font>

 

Ele mostra "Eh diferente"... Então creio que ele esteja pegando o número 201100001 inteiro e comparando com a Data do sistema, então eh ai que aparece a msg "Eh diferente". Não vejo outra lógica... o Left só exibe 'x' quantidade de caracteres que quero e não os extrai, não eh?!?

Preciso de algo parecido com o Split talvez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa o SPLIT para desmembrar os numeros

tem um poste que coloquei onde você faz varias operações com string, procure por varias funçõees para manipular string

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu não entendo como que o Split eh capaz de fazer o que eu quero.

 

Esse meu ID eh um inteiro e eh uma coisa só sem separador ou coisa do tipo 201100001...

Pra usar o split deveria haver um espaço(exemplo: 2011 00001) ou um separador como (exemplo: 2011/00001 ou 2011-00001) Ai sim talvez daria pra usar o Split.

 

Procurei seu post e não o achei... no google tbm não encontro nada que me ajude.

 

Eh possivel fazer isso que tenho em mente??

Pegar esse número 201100001 "fatia-lo", pegar os quatro primeiros digitos 2011 armazenar em uma variavel (talvez não sei se seja necessário converter ou nao) ai comparar com o ano do sistema... se for igual *-- variavel(2011) = Year(Date)--* soma 1 ao ID 201100001 (que ficaria 201100002).

Caso a variavel com o numero 2011 for diferente do ano do sistema, ai o começo do meu Id mudaria para 2012 e o ID ficaria 201200001 como se começasse tudo de novo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha esses code´s talvez clareie alguma idéia

 

Varias funções , tais como , na descrição:

Replace_Bad_Words - Uma função para substituir removendo Bad strings.

Rep_Chars - remove caracteres indesejados de strings (html, especial, reservado) para o armazenamento de dados.

Fix_Chars - substitui caracteres de fixação feita por Rep_Chars. Correções de caracteres para exibir html.

Sentence_Continue - Formata uma string para um certo tamanho, se demasiado longo e, em seguida, adiciona um ... ao final do mesmo.

Count_Words - Conta o número de palavras em uma strings.

Make_Word_Wrap - Wraps o número de caracteres permitidos, acrescentando um espaço para romper excessivamente palavras longas .

 

Function Replace_Bad_Words(Data As String) As String


   If Data = "" Then Exit Function
   '-------------------------------------

   'Dirt Words----------------------
   Bad_Word = Array("ass", "bitch", "biatch", "blowjob", "bukkake", "bullshit", "cunt", "cum", "dicked", "dickhead" _
            & "dickweed", "dildo", "fuck", "gangbang", "goddamnit", "handjob", "jackoff", "motherfucker", "motherfucking" _
            & "pissed", "pisses", "---o", "pussy", "pussified", "shit", "titties", "twat")
   '--------------------------------

   'Replace Bad Words-----------------
   For Bad = 0 To UBound(Bad_Word)
   Data = Replace(Data, Bad_Word(Bad), String(Len(Bad_Word(Bad)), "*"), , , vbTextCompare)
   Next Bad
   '----------------------------------


   Replace_Bad_Words = Data
   '--------------------------

End Function

Function Rep_Chars(Data As String) As String

   'Replace caracters to allow in database, one to one ratio---
   Data = Replace(Data, Chr(60), Chr(251))
   Data = Replace(Data, Chr(62), Chr(252))
   Data = Replace(Data, Chr(34), Chr(253))
   Data = Replace(Data, Chr(39), Chr(254))
   Data = Replace(Data, Chr(13), Chr(255))
   '-----------------------------------------------------------


   Rep_Chars = Data
   '-----------------

End Function

Function Fix_Chars(Data As String) As String


   Data = Replace(Data, Chr(251), "<")
   Data = Replace(Data, Chr(252), ">")
   Data = Replace(Data, Chr(253), """)
   Data = Replace(Data, Chr(254), "'")
   Data = Replace(Data, Chr(255), "<br>")
   '----------------------------------------------------


   Fix_Chars = Data
   '-----------------

End Function

Function Sentence_Continue(Data As String, chrlength As Integer) As String

   If Len(Data) > chrlength Then
   Sentence_Continue = Mid(Data, 1, chrlength) & "..."
   Else
   Sentence_Continue = Data
   End If
   '-----------------------------------------------

End Function

Function Count_Words(Data As String) As Integer


   Words = Split(Data, " ")
   Count_Words = Int(UBound(Words) + 1)
   '---------------------------------

End Function

Function Make_Word_Wrap(Data_String As String, Word_Size_Allowed As Integer)


   Counter = 0
   Fixed_Word = ""
   '----------------------------------------


   If Data_String = "" Then Exit Function
   '--------------------------------------------


   If Len(Data_String) < Word_Size_Allowed Then
   Make_Word_Wrap = Data_String
   Exit Function
   End If
   '----------------------------------------------------------------


   DataOf = Split(Data_String, " ")
   '------------------------------------------------------


   For Breakdown = LBound(DataOf) To UBound(DataOf)


   If Len(DataOf(Breakdown)) > Word_Size_Allowed Then

   For breakword = 1 To Len(DataOf(Breakdown))

   Counter = Counter + 1

   'Replace characters that are too long with spaces-------------
   If Counter > Word_Size_Allowed Then
   Fixed_Word = Fixed_Word & " " & Mid(DataOf(Breakdown), breakword, 1)
   Counter = 1
   Else
   Fixed_Word = Fixed_Word & Mid(DataOf(Breakdown), breakword, 1)
   End If
   '-------------------------------------------------------------

   Next breakword
   '

   'Set new values and reset word-----------------
   DataOf(Breakdown) = Fixed_Word
   Fixed_Word = ""
   '----------------------------------------------

   End If
   '------------------------------------------------

   Next Breakdown


   For Rebuild = LBound(DataOf) To UBound(DataOf)
   New_String = New_String & DataOf(Rebuild) & " "
   Next Rebuild
   New_String = Mid(New_String, 1, Len(New_String) - 1)
   '-----------------------------------------

   Make_Word_Wrap = New_String

End Function
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta ai:

 

ID =  20110001 
ano_id = Cint(LEFT(ID,4))
If Cint(Year(Date)) = ano_id Then
ano_correto = ano_id + 1
Else
ano_correto = ano_id
End If

ID = REPLACE(ID,ano_id,ano_correto)
Response.Write ID

Compartilhar este post


Link para o post
Compartilhar em outros sites

você para otimizar o code, criar uma função para isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi errado, pensei que era pra somar só mais um, acho que agora é o que você quer:

 

ID =  20110001 'aqui simula vindo do banco óbvio'
ano_id = Cint(LEFT(ID,4)) 'ano_id recebe o ano da id do banco'
If Cint(Year(Date)) <> ano_id Then 'se a data atual for diferente do ano da id do banco'
ano_correto = ano_id + 1 'ano_correto recebe o ano da id do banco + 1'
ID = REPLACE(ID,ano_id,ano_correto) 'ID recebe a id inteira com o ano ja corrigido'
Else 'senao se o ano atual for igual ao ano da id do banco'
ID = ID + 1 'a id recebe a id + 1, ex: 20110001 + 1 = 20110002'
End If
Response.Write ID

 

 

O único problema é que o número inteiro da id seria 20110001, portanto quando registro chegar em 20119999, em vez de ir para 201110000 preservando o ano, irá para 20120000. Mas ai você se vira ai pra separar isso também ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer isso separadamente e depois concatenar os numeros

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO]

auhauhauhuahuhauuha... Pooww Felipe meu chará... como assim na praia mew??? Quem dera! hehehehe...

 

Mew... não sabem como esse sisteminha esta me deixando doido... ainda mais quando apanho pra fazer algo e ai chega um e diz "eu sei que passei isso, mais não da pra fazer aquilo?"...

Noossa....

 

Então o problema eu consegui solucionar...

Era só questão de iniciar a variavel com zero e atribuir o valor. O Resto era isso ai que passaram.

 

Segue solução:

'Aqui ocorria o erro... pelo jeito precisava zerar esta variavel para atribuir alguma coisa nela.
ultData = 0
ultData = UltData + left(ins.fields("NumSolicit"),4) 'Pegando os 4 primeiro digitos 2011 por exemplo do numero 201100001


'********************************************************************************************************************************
'--------------------------------------------------------------------------------------------------------------------------------
'	Comparando o ID com o ANo SE FOR IGUAL
'--------------------------------------------------------------------------------------------------------------------------------
'********************************************************************************************************************************


 If ultData = Year(Date) Then 'Se os primeiros digitos forem iguais ao ano corrente

Varx = Ins.Fields("NumSolicit")+1 ' fiz um método próprio de inserir PK com os primeiros 4 digitos igual ao ano corrente e os 5 seguintes acrescenta mais um ao novo dado inserido.

'insere os dados (parametros) nas suas respectivas colunas
sSQL="Insert Into ContEng_Solicit (NumSolicit, Cliente, Aplicacao, Produto, NomePeca, Data, Solicitante, TipoDeSolicitacao, TipoConstrutivo, ECN, StatusDesenhoMaterial) values ('" & Varx & "','" & Cliente & "','" & Aplicacao & "','" & Produto & "','" & NomePeca & "',convert(smalldatetime,'" & Data & " ',103),'" & Solicitante & "','" & TipoDeSolicitacao & "','" & TipoConstrutivo & "', '" & ECN & "','" & StatusDesenhoMaterial& "')"

'________________________________________________________________________________________________
'Executamos a ordem
'________________________________________________________________________________________________

set RS = Conn.Execute(sSQL)

Desculpa a demora para responder mais uma vez hen!!!

rsrs... boa semana a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.