Clipper On Line • Ver Tópico - MySQL: datetime

MySQL: datetime

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

MySQL: datetime

Mensagempor cjp » 24 Mai 2021 00:31

Pessoal,

Estou tentando usar o campo datetime no MySQL via Harbour, mas estou tendo dificuldade para tratar o campo no Harbour. Não consigo descobrir qual é o tipo de campo no Harbour.

Testei type(campo), dá erro.

Testei valtype(campo), retorna T. Não achei esse tipo de campo no NG.

Testei usar esse campo como caractere, dá erro.

Testei usar ctod(campo), também dá erro.

Alguém poderia me ajudar, por favor?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

MySQL: datetime

Mensagempor JoséQuintas » 24 Mai 2021 13:19

cjp escreveu:Testei valtype(campo), retorna T. Não achei esse tipo de campo no NG.


Pois é, há vários tipos que não encontra no NG, porque NG é pra CLIPPER.

T é justamente campo datetime

Tem também incremental e outros.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

MySQL: datetime

Mensagempor Itamar M. Lins Jr. » 24 Mai 2021 14:23

Olá!
Complementando.
>hbmk2 -find hb_tt
itamar@itamar-desktop:~$ hbmk2 -find hb_tt
Núcleo Harbour (instalado):
   hb_TToC()
   hb_TToD()
   hb_TToHour()
   hb_TToMin()
   hb_TToMSec()
   hb_TToN()
   hb_TToS()
   hb_TToSec()


Campo Timestamp conversão.
E tem gente que pensa que Harbour é só clipper para 32 bits.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6959
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

MySQL: datetime

Mensagempor JoséQuintas » 24 Mai 2021 15:03

Mais tipos

Harbour extended Field Types

D Date 3, 4 or 8 Date
M Memo 4 or 8 Memo
+ AutoInc 4 Auto increment
= ModTime 8 Last modified date & time of this record
^ RowVers 8 Row version number; modification count of this record
@ DayTime 8 Date & Time
I Integer 1, 2, 3, 4 or 8 Signed Integer ( Width : )" },;
T Time 4 or 8 Only time (if width is 4 ) or Date & Time (if width is 8 ) (?)
V Variant 3, 4, 6 or more Variable type Field
Y Currency 8 64 bit integer with implied 4 decimal
B Double 8 Floating point / 64 bit binary
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

MySQL: datetime

Mensagempor cjp » 24 Mai 2021 15:40

Entendi.
Só resta a dúvida de como exatamente tratar esse campo no Harbour. Ele não é texto, não é data... como faço para convertê-lo num texto?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

MySQL: datetime

Mensagempor alxsts » 24 Mai 2021 16:49

Olá!

Set Date British
? hb_Date()                  --> 24/05/2021
? Time()                     --> 16:37:12
? hb_DateTime()              --> 24/05/2021 16:37:19.979  // Este formato é um timestamp. Em XML usa-se 24/05/2021T16:37:19.979
? hb_DtoT(hb_Date(), 82000 ) --> 24/05/2021 22:46:40.000

cjp escreveu:como faço para convertê-lo num texto?

o hb_Date([<nYear>, <nMonth>, <nDay>]) ➜ dDate
Harbour extension to the Date() function that returns a date value from the supplied day, month and year values. If any of them is invalid or missing, an empty date is returned. If none of them is supplied, the current date is returned.

o hb_DateTime([<nYear>, <nMonth>, <nDay>, <nHour>, <nMinute>, <nSecond>, <nFragment>]) ➜ tTimeStamp
Returns a timestamp value from the supplied day, month, year, hour, minute, second and second-fragment values. If none of them is supplied, the current date and time is returned.

o hb_DtoC(<dDate>|<tTimeStamp> [, <cDateFormat>]) ➜ cDate
Harbour extension to the DtoC() function. It converts a date value <dDate> (or the date value of <tTimeStamp>) to a string. If no date format is supplied the _SET_DATEFORMAT format will be used.

o hb_DtoT(<dDate> [, <cnTime>]) ➜ tTimeStamp
Returns a timestamp from the date and time values. <dDate> is a date value and <cnTime> is the time part and could be a number (as from Seconds()) or a string (as from Time()), (see time string format).

o hb_TSToStr( <tTimeStamp> [, <lPacked>] ) ➜ cTimeStamp
Returns <cTimeStamp> with the format YYYY-MM-DD hh:mm:ss.fff. If <lPacked> is .T. empty elements of the timestamp will be stripped out.

o hb_TSToUTC( [<tLocalTime>] ) ➜ tUtcTime
Converts a local time tTIMESTAMP to UTC time.

o hb_TtoC( <dDate>|<tTimeStamp> [, <cDateFormat>, <cTimeFormat>] ) ➜ cTimeStamp
Converts date or timestamp values to timestamp formatted strings.

o hb_TtoD( <dDate>|<tTimeStamp> [, @<nSeconds>|@<cTime>, @<cTimeFormat>] ) ➜ dDate
Extracts date and time information from a timestamp or date value. It returns the date part as a date value. If <@nSeconds> or @<cTime> parameter is passed by reference then it obtains either the number of seconds in given day specified by timestamp value or the time as time string. If no <cTimeFormat> passed, then _SET_TIMEFORMAT is used.

o hb_TtoN( <dDate>|<tTimeStamp> ) ➜ nValue
Converts a date or timestamp value to numeric value. The integer part of returned <nValue> is the date part represented as a Julian date value, and the decimal part is the time part represented as milliseconds from midnight.
NOTE: the returned nValue must not be confused with Unix time number, since they're totally different!

o hb_TtoS( <dDate>|<tTimeStamp> ) ➜ cDateTime
Converts a date or timestamp value to string formated as YYYYMMDDHHMMSSFFF.

o hb_TToHour( <tTimeStamp> ) ➜ nHours

o hb_TToMin ( <tTimeStamp> ) ➜ nMinutes

o hb_TToSec ( <tTimeStamp> ) ➜ nSeconds

o hb_TToMSec( <tTimeStamp> ) ➜ nMilliseconds
The above four functions calculate/convert the <tTimeStamp> timestamp value to hours, minutes, seconds and milliseconds respectively.
All but hb_TToMSec() functions return a floating point number, where the fractional part represents the rest (decimal remainder) of the conversion. The hb_TToMSec() function returns milliseconds as an integer value.

NOTE: they are new functions, available for use after 2016-12-15 12:51 UTC+0100 commit (they are not available in earlier Harbour versions).

Fonte:
Petewg/harbour-core
https://github.com/Petewg/harbour-core/wiki/hb_D
https://github.com/Petewg/harbour-core/wiki/hb_T

NewDateTimeFunctions
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

MySQL: datetime

Mensagempor cjp » 25 Mai 2021 00:43

Tentei usar estas funções aqui, mas está dando undefined reference na compilação.
Preciso de alguma lib extra?
Estou usando o hb32.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

MySQL: datetime

Mensagempor Itamar M. Lins Jr. » 25 Mai 2021 12:58

Olá!
mas está dando undefined

Cadê ?
Mostra a tela, mostra o código.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6959
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

MySQL: datetime

Mensagempor alxsts » 25 Mai 2021 13:10

Olá!

alxsts escreveu:
NOTE: they are new functions, available for use after 2016-12-15 12:51 UTC+0100 commit (they are not available in earlier Harbour versions).
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

MySQL: datetime

Mensagempor cjp » 27 Mai 2021 15:50

De fato, a versão que eu estou usando deve ser anterior mesmo, pois já a uso há bastante tempo.
Testei agora com uma versão do hb 3.4 que tenho instalada, e funcionou. Vou ter algum trabalho para migrar meu sistema para esta versão, e também não sei se essa é a mais adequada, mas esta é outra questão.
O que ainda não entendi é o seguinte: como vou pegar o campo datetime do MySQL e pegar só a hora dele para usar no Harbour? Imagino que uma das funções que o Quintas citou faça isso, mas eu não consegui fazer.
Basicamente quero apenas pegar um campo da tabela MySQL que esteja, por exemplo, "2021-05-27 15:00:00", pegando apenas a hora (15:00) para trabalhar no Harbour como uma variável caratere.
Poderiam me ajudar?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

MySQL: datetime

Mensagempor alxsts » 27 Mai 2021 19:43

Olá!

cjp escreveu:Vou ter algum trabalho para migrar meu sistema para esta versão, e também não sei se essa é a mais adequada, mas esta é outra questão.

Você não precisa mudar para o 3.4 que, aliás, está parado há algum tempo. Apenas atualize o teu Harbour para a versão atual que é a 3.2. Eu uso a versão 3.2 Nightly e testei estas funções e funcionam.
cjp escreveu:como vou pegar o campo datetime do MySQL e pegar só a hora dele para usar no Harbour?

Uma opção simples é:
SELECT Right( Cast(now() as Varchar(16)), 5 )  -- Troque a função Now() pelo teu campo DateTime

Pode também trazer o valor DateTime do banco e extrair a hora com funções do Harbour...

Veja: MySQL Date and Time Functions
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

MySQL: datetime

Mensagempor cjp » 27 Mai 2021 23:20

Poderia, por favor, me indicar qual o melhor lugar para baixar a versão indicada?

Testei no Heidisql o exemplo que vc mencionou, mas está dando erro (vide anexo). Fiz algo errado?
Anexos
tela.png
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

MySQL: datetime

Mensagempor cjp » 27 Mai 2021 23:35

A propósito, vendo o link citado, vi que a time() do MySQL resolve parte dos meus problemas.
Mas ainda preciso de uma função que trate o campo datetime no próprio Harbour.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

MySQL: datetime

Mensagempor alxsts » 28 Mai 2021 00:53

Olá!
cjp escreveu:Poderia, por favor, me indicar qual o melhor lugar para baixar a versão indicada?

Veja o tópico: Instalação e configuração do Harbour - Win64

Sem querer ser indelicado, faço uma observação: nosso fórum é riquíssimo em informações relativas a xBase. Além disto, dispõe de um mecanismo de busca. Temos também o Google...
cjp escreveu:Testei no Heidisql o exemplo que vc mencionou, mas está dando erro (vide anexo). Fiz algo errado?

Capturar.JPG

Aqui, no MariaDB 10, normal, como mostrado acima. Informe qual banco de dados e respectiva versão usou para ver este erro. Use o comando:
SELECT Version()

cjp escreveu:A propósito, vendo o link citado, vi que a time() do MySQL resolve parte dos meus problemas..
Mas ainda preciso de uma função que trate o campo datetime no próprio Harbour.

Esta tal função NÂO existe no próprio Harbour. Retorne (select) o campo datetime do banco em formato string ou o resultado da função Time(). Use sua criatividade e aplique as funções de tratamento de string do Harbour para obter o que precisa. Tem várias, além das funções de tratamento de data e hora): Substr(), Left(), Right()...
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

MySQL: datetime

Mensagempor cjp » 28 Mai 2021 01:23

Veja o tópico: Instalação e configuração do Harbour - Win64


Obrigado, vou instalar.

Sem querer ser indelicado, faço uma observação: nosso fórum é riquíssimo em informações relativas a xBase. Além disto, dispõe de um mecanismo de busca. Temos também o Google...


Peço desculpas. De fato, eu respondi apressadamente, sem pesquisar antes.

Aqui, no MariaDB 10, normal, como mostrado acima. Informe qual banco de dados e respectiva versão usou para ver este erro. Use o comando:


Então, aqui está o problema. O comando indicando está retornando a versão 5.6.49-log (vide anexo).

Minha dúvida é: esta é a versão do MariaDB ou do MySQL? Porque o MariaDB aqui parecer ser o 10.4 (vide anexo).

Esta tal função NÂO existe no próprio Harbour. Retorne (select) o campo datetime do banco em formato string ou o resultado da função Time(). Use sua criatividade e aplique as funções de tratamento de string do Harbour para obter o que precisa. Tem várias, além das funções de tratamento de data e hora): Substr(), Left(), Right()...


O problema é que, com a versão que estou usando agora do Harbour, eu não consigo tratar a string que o select me retorna de forma alguma. Mas, atualizando o Harbour, espero resolver isso.

Outro detalhe. Com este select:

select online,time(online) as hora from numeros where id=1


No Heidi está retornando corretamente apenas a hora do campo online (campo este que é datetime).

Mas, no Harbour, usando ADO, o mesmo select dá o "hora" com a string completa datetime (2021-05-28 00:41:14).

Isso também é por causa da versão do Harbour?
Anexos
tela3.png
tela3.png (7.1 KiB) Visualizado 1678 vezes
tela2.png
tela2.png (6.11 KiB) Visualizado 1678 vezes
tela4.png
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Próximo



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 17 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro