Como inverter uma data

Fao um select em um banco mysql que a data guardada como aaaa-mm-dd
o resultado vai para um recordset , quando mando para um report a data vai 2014-08-30.
como inverto essa data para ficar no formato dd-mm-aaaa dentro do report ?

Muito Obrigado.

[quote=125929:@Cauby Osorio]Faço um select em um banco mysql que a data é guardada como aaaa-mm-dd
o resultado vai para um recordset , quando mando para um report a data vai 2014-08-30.
como inverto essa data para ficar no formato dd-mm-aaaa dentro do report ?

Muito Obrigado.[/quote]

Olá Cauby,

Tenho uma situação semelhante, mas em formulários. De qualquer modo, acredito que o princípio seja o mesmo, já que também uso o MySql.  

1 - Eu crio variáveis representando as datas que quero tratar, recebidas do banco. No exemplo abaixo, myDataEmissao e myDataEntrada.
2 - Igualo os valores de cada uma aos valores correspondentes do recordSet retornado do banco de dados.
3 - Verifico se nenhum valor é nulo, e atribuo o valor das variáveis aos meus campos textField do formulário, no formato “ShortDate”, que já se encarrega de formatar do modo correto, de acordo com as configurações do sistema.

[code]
Dim myDataEmissao As Date
Dim myDataEntrada As Date

sql = "Select * from notasentradas where id = " + me.myId

rs = App.myDb.SQLSelect( sql )

If App.myDb.Error then
  MsgBox "Erro carregando dados da NF: " + App.myDb.ErrorMessage
  return
end if

//Tratamento para formatar as datas recebidas do banco de dados
myDataEmissao = rs.Field("dataEmissao").DateValue
myDataEntrada = rs.Field("dataEntrada").DateValue

//Data Emissao
If not (myDataEmissao is Nil) Then
  me.txtDataEmissao.Text = myDataEmissao.ShortDate
End if

//Data Entrada
If not (myDataEntrada is Nil) Then
  me.txtDataEntrada.Text = myDataEntrada.ShortDate
End if
[/code]

Se não funcionar, poste novamente que tento te ajudar de outra forma…

Estou aprendendo xojo agora pelo que entendi dentro do report eu uso o componente visual report field que tem a propriedade datafield onde eu coloco a coluna resultado do recordset
ex:
datafield = nascimento

com eu escreveria quele cdigo todo ?

[quote=126278:@Cauby Osorio]Estou aprendendo xojo agora pelo que entendi dentro do report eu uso o componente visual report field que tem a propriedade datafield onde eu coloco a coluna resultado do recordset
ex:
datafield = nascimento

com eu escreveria quele código todo ?[/quote]

Olá Cauby,

Se o seu caso é formatar para passar para o campo do relatório, então você pode tentar a formatação direta na cláusula sql. Algo assim:
SELECT REPLACE(CONVERT(VARCHAR(11),GETDATE(),6), ' ','/');
isso resulta em: 20/Jun/13

SELECT REPLACE(CONVERT(VARCHAR(11),GETDATE(),106), ' ','/');
resulta em: 20/Jun/2013  (com o ano de 4 dígitos...)

Cada código no final (6 no primeiro, 106 no segundo…) dá um resultado diferente. Isso varia um pouco de banco de dados para banco de dados. Você precisa testar e ver o resultado.

Outra forma:

SELECT ProductName, Price, FORMAT(Now(),'DD-MM-YYYY') AS PerDate
FROM Products;
resulta em: 01-09-2014

Neste link você encontra bastante material e exemplos de sql com datas: http://passionforsql.com/2014/03/date-formats-in-sql.html

Achei a ideia tima de inverter no select a data s que fiz uns testes com seu exemplo e esta me retornando erro no convert.

Andei olhando o convert no Mysql parece que ele s tem dois parametros Convert(campo_da_tabela, tipo) o terceiro para metro 106 quando eu coloco da erro.
E continuo na mesma porque meu campo chamado nascimento na tabela o formato 1969-03-14

Se eu colocar assim:
sql = “SELECT idcli , nome , telefone, replace(convert(nascimento,date),’-’,’/’) AS nascimento FROM Clientes ORDER BY nome ;”
No da erro, mais minha data continua aparecendo invertida no report.

J tentei colocar no report datafield = nascimento.ShortDate
No d erro mais tambm no aparece as datas no report.

O format tambem no deu certo colquei assim:
sql = “SELECT idcli , nome , telefone, format(nascimento,‘DD-MM-YYYY’) AS nascimento FROM Clientes ORDER BY nome ;”
No me da erro mais a data vem com uns nmeros estranhos tipo 19,720,513

Desculpe sou novo tanto com o xojo como com o Mysql devo esta fazendo o monte de bobagem

Uma luz ao cego.

Obrigado amigo.

[quote=127044:@Cauby Osorio]Achei a ideia ótima de inverter no select a data só que fiz uns testes com seu exemplo e esta me retornando erro no convert.

Andei olhando o convert no Mysql parece que ele só tem dois parametros Convert(campo_da_tabela, tipo) o terceiro para metro 106 quando eu coloco da erro.
E continuo na mesma porque meu campo chamado nascimento na tabela o formato é 1969-03-14

Se eu colocar assim:
sql = “SELECT idcli , nome , telefone, replace(convert(nascimento,date),’-’,’/’) AS nascimento FROM Clientes ORDER BY nome ;”
Não da erro, mais minha data continua aparecendo invertida no report.

Já tentei colocar no report datafield = nascimento.ShortDate
Não dá erro mais também não aparece as datas no report.

O format tambem não deu certo colquei assim:
sql = “SELECT idcli , nome , telefone, format(nascimento,‘DD-MM-YYYY’) AS nascimento FROM Clientes ORDER BY nome ;”
Não me da erro mais a data vem com uns números estranhos tipo 19,720,513

Desculpe sou novo tanto com o xojo como com o Mysql devo esta fazendo o monte de bobagem

Uma luz ao cego.

Obrigado amigo.[/quote]

Cauby, veja a imagem deste link com um teste. Estou usando MySql…

https://www.dropbox.com/s/zio8p4l6q5ol0lo/Captura%20de%20tela%202014-09-04%2016.48.46.png?dl=0

A formatação para o MySql fica assim:

select id, campo1, campo2, DATE_FORMAT(campoData, '%d-%m-%y') as dataFormatada from tabela

esse DATE_FORMAT show, era isso mesmo que estava querendo
sql = “SELECT idcli , nome , telefone,DATE_FORMAT(nascimento,’%d/%m/%Y’) AS nascimento FROM Clientes ORDER BY nome ;”

Foi bom que j conheci o replace , convert e o format
Muito obrigado.

Estou encarregado de escolher uma nova linguagem para empresa estou testando o xojo e estou gostando, todos os testes que fiz at agora foi para desktop, agora vou fazer teste para web para ver se vamos partir para o xojo mesmo.

Devo pertubar muito voces ainda.

Muito obrigado novamente.

[quote=127070:@Cauby Osorio]esse DATE_FORMAT é show, era isso mesmo que estava querendo
sql = “SELECT idcli , nome , telefone,DATE_FORMAT(nascimento,’%d/%m/%Y’) AS nascimento FROM Clientes ORDER BY nome ;”

Foi bom que já conheci o replace , convert e o format
Muito obrigado.

Estou encarregado de escolher uma nova linguagem para empresa estou testando o xojo e estou gostando, todos os testes que fiz até agora foi para desktop, agora vou fazer teste para web para ver se vamos partir para o xojo mesmo.

Devo pertubar muito voces ainda.

Muito obrigado novamente.[/quote]

Fique a vontade em perguntar. Não sou nenhum expert em Xojo, mas só não respondo se realmente não souber… Sei que todo início é complicado, por mais experiência que se tenha em outras linguagens… :slight_smile: