Ir para conteúdo

POWERED BY:

Arquivado

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

notax

[Resolvido] Mid dentro da query

Recommended Posts

Galera, seguinte tenho um campo no bd mysql (Dt_Nasc) que tem a data de nascimento escrita assim:

ddmmyyyy

 

Assim mesmo, sem separadores e no formato brazuca...

 

O que preciso?

 

Preciso saber todos os registros que nasceram em 1980, ou seja, seria uma consulta com between simples... entre 1980-01-01 and 1980-12-31....

 

 

Mas como vou fazer isso se no BD as datas não estão em formato de data e eu não posso as alterar... pois é um bd externo?

 

Alguém sabe?

Compartilhar este post


Link para o post
Compartilhar em outros sites

formata antes a data depois você faz a SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

todos estão neste formato?

 

Use a função RIGHT para pegar os 4 primeiros caracteres para comparar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Complementando o que o Mario disse veja abaixo um exemplo:

 

Função: Right ( )

 

Devolve um numero específico de caracteres do lado direito de uma string.

Dim MeuString, Resultado
MeuString = "VBScript"
Resultado =Right(MeuString, 6) ' Resultado tem "Script".

 

Como vimos o right conta os caracteres do lado direito para o esquerdo.

Se quiser o contrario, pode usar o left:

 

Função: Left ( )

 

Devolve um numero específico de caracteres do lado esquerdo de uma string.

Dim MeuString, Resultado
MeuString = "VBSCript"
Resultado = Left(MeuString, 3) ' Resultado tem "VBS".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Formato: dd-mm-aaaa

<%
Function ConverterDataBanco(ConDataBanco)
ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como vimos o right conta os caracteres do lado direito para o esquerdo.

Se quiser o contrario, pode usar o left:

 

Função: Left ( )

 

Voce tem razão não sei nem de onde tirei o RIGHT sendo que estava vendo os 4 caracteres a esquerda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, assim... agradeço muito, de coração a ajuda de todos... mas vejam, meu problema nunca foi saber como formatar a data e sim como fazer isso direto na query... e isso continuo sem saber... continuo com dúvidas na sintaxe disso...

 

Olhem, o banco de dados é gigante então não posso fazer um loop para formatar as datas e depois outro loop para pegar os registros... tem que ser tudo ao mesmo tempo, se não da script timeout... já fiz os testes...

 

Qual a minha dúvida: exatamente como disse no texto... como faço para fazer um mid dentro da própria query?

 

Eu seu por exemplo que:

str = "21032010"

ano = mid(str, 5, 4)

 

No entanto, quero fazer isso dentro da própria query, exemplo:

 

sql = "select from tabela where mid(data, 5, 4) between '1980' and '1985' "

 

sacaram? é mais ou menos isso que eu quero... tem como?

 

Caso não de pra fazer por mid, outro forma que poderia se dar é formatar a data dentro da propria query tb...

 

IMPORTANTE: apenas não se esqueçam que a data a qual me refiro, ou seja, a data que precisa de formatação, é um campo do BD e essa formatação deve ser na própria query, certo?

 

Valew pela atenção... tomara que possam me ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se pode te ajudar:

Este comando funciona em Mysql, no exemplo retorna os primeiros 25 caracteres contados a partir da esquerda:

SELECT id, name, LEFT(comments, 25) FROM comments ORDER BY cdate DESC LIMIT 5

 

Site onde achei este comando: http://www.bernzilla.com/item.php?id=400

 

Creio que com uma pequena adaptação na clausula, deverá fazer como precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brigadão pelo retorno... tentei assim:

 

ComandoSQL0 = "SELECT COUNT(*) AS total FROM comp a, simp b where a.Cidade LIKE '%" &cidade& "%' and a.`codigo-pd` = b.`codigo-pd` and  right(b.Dt_Nasc between,4) between '"&(aai)&"' and '"&(aaf)&"' ORDER BY a.Nome ASC"

 

 

e deu esse erro aqui na linha que executa a query:

 

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

 

[MySQL][ODBC 3.51 Driver][mysqld-5.1.45-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '4) between '1980' and '1985' ORDER BY a.Nome ASC' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá um response.write na sql e verifique se não está faltando alguma aspas simples ou duplas na clasula ou alguma variavel que não está como esperado

 

Coloque essa clausula no mysql query browser, e testa por lá, geralmente faço assim com algumas clausulas mais complexas pois com a colorização que ele faz, dá para ter uma noção melhor do que está acontecendo.

 

Outra ideia seria usando ainda o mysql query browser, ir montando em "partes" a clausula, por exemplo:

SELECT COUNT(*) AS total FROM comp a, simp b where a.Cidade LIKE '%" &cidade& "%' and a.`codigo-pd` = b.`codigo-pd`;
Select * right(b.Dt_Nasc between,4) from comp a, simp b between '"&(aai)&"' and '"&(aaf)&"' ORDER BY a.Nome ASC;

 

Assim dá para ver melhor qual parte pode estar errada ou incompativel com o conjunto de instruções dadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido! Era isso mesmo... tinha cometido um erro colocando um between perdido ali!

 

Matou a pau!

 

Brigadão...

 

Ficou assim:

ComandoSQL0 = "SELECT COUNT(*) AS total FROM comp a, simp b where a.Cidade LIKE '%" &cidade& "%' and a.`codigo-pd` = b.`codigo-pd` and  right(b.Dt_Nasc, 4) between '"&(aai)&"' and '"&(aaf)&"' ORDER BY a.Nome ASC"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique a ortografia. pode ser um nome de coluna Invalido 'sua_coluna'. A coluna a qual você se refere na Base de Dados não foi encontrada. e também veja se os tipos de dados estão corretos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém sabe porque isso não funciona no access também? Como fazer no access?

 

" Select aniversariantes where right(Dt_Nasc, 4) between '"&(aai)&"' and '"&(aaf)&"' "

 

Deveria funcionar?

 

Ex.: nesse trecho abaixo, funciona no mysql mas no access da um erro, tb abaixo:

 

 

ComandoSQL2 = "SELECT distinct Right(Prazo, 2) as prazo FROM Total order by Prazo asc"
Set objRs2 = objConn.Execute(ComandoSQL2)

 

Esse trecho acima da esse erro aqui:

 

Microsoft JET Database Engine error '80004005'

 

ORDER BY clause (Prazo) conflicts with DISTINCT.

 

/credsul/consulta0.asp, line 315

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certos comandos sql suportados no mysql, não são suportados no access e vice-versa.

Ex:

Delete * from tabela where id=1

 

No access funciona, mas no mysql precisa de uma pequena adaptação:

Delete tabela.* from tabela where id=1

 

É bom verificar qual a sintaxe é suportada para cada banco de dados que iremos trabalhar, pois pequenas variações podem ocorrer.

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.