URGENTE! Select com Hora
Oi Pessoal,
Gostaria de saber como faço um select passando por
parâmetro uma hora qualquer num campo só de hora que é
TIMESTAMP, pelo Delphi 7 usando Interbase 6.
Por exemplo,
Tabela PONTO
Campos TIPO
-------------------------
CODIGO INTEGER
NOME VARCHAR(50)
DATA TIMESTAMP
HORA CHEGADA TIMESTAMP
HORA SAIDA TIMESTAMP
Aí eu quero as pessoas que no dia 10/08/03 chegaram
depois das 09:00 e saíram antes das 18:00.
Já tentei de várias formas mas ele dá erro quando
começa a ler a hora que estou pedindo.
Abraço,
Gostaria de saber como faço um select passando por
parâmetro uma hora qualquer num campo só de hora que é
TIMESTAMP, pelo Delphi 7 usando Interbase 6.
Por exemplo,
Tabela PONTO
Campos TIPO
-------------------------
CODIGO INTEGER
NOME VARCHAR(50)
DATA TIMESTAMP
HORA CHEGADA TIMESTAMP
HORA SAIDA TIMESTAMP
Aí eu quero as pessoas que no dia 10/08/03 chegaram
depois das 09:00 e saíram antes das 18:00.
Já tentei de várias formas mas ele dá erro quando
começa a ler a hora que estou pedindo.
Abraço,
Brumdrums
Curtidas 0
Respostas
Afarias
03/09/2003
Campos para guardar somente HORA são do tipo TIME e não TIMESTAMP.
Segue alguns exemplos::
select * from minha_tabela
where campo_time between ´09:00:00´ and ´18:00:00´;
select * from minha_tabela
where campo_timestamp between ´09/03/03 09:00:00´ and ´09/03/03 18:00:00´;
select * from minha_tabela
where cast(campo_timestamp as time) between ´09:00:00´ and ´18:00:00´;
T+
Segue alguns exemplos::
select * from minha_tabela
where campo_time between ´09:00:00´ and ´18:00:00´;
select * from minha_tabela
where campo_timestamp between ´09/03/03 09:00:00´ and ´09/03/03 18:00:00´;
select * from minha_tabela
where cast(campo_timestamp as time) between ´09:00:00´ and ´18:00:00´;
T+
GOSTEI 0
Brumdrums
03/09/2003
Eu sei, mas estou usando isso no Delphi, e quando vou puxar os campos ele diz que não suporta o Dialect 1, aí tenho que botar TIMESTAMP.
Outros amigos também só usam campo HORA com TIMESTAMP devido a isso.
Valeu.
Outros amigos também só usam campo HORA com TIMESTAMP devido a isso.
Valeu.
GOSTEI 0
Afarias
03/09/2003
Se vc reparar... entre os exemplos q coloquei 2 são para quem usa campos TIMESTAMP
Vc provavelmente está usando BDE para acessar o INTERBASE -- o q eu não aconselho.
T+
Vc provavelmente está usando BDE para acessar o INTERBASE -- o q eu não aconselho.
T+
GOSTEI 0
Brumdrums
03/09/2003
Fala,
Eu uso o dbExpress para conectar ao banco.
Fiz mais uns testes aqui e o erro para estar numa soma que faço no select, vou lhe mostrar o código e talvez vc me ajude.
Select * From AGENDA
Where ContaUsr = ´SUPERVISOR´
AND Dia = ´09/04/2003´
AND CAST(Hora As Time) < ´10:30:00´
AND (CAST(Hora As Time) + CAST(Duracao As Time)) > ´10:01:00´
Aquele exemplo que havia dado anteriormente era hipotético pq com esse aqui algumas pessoas não entendiam.
Se eu tirar a última linha ele funciona, mas quando executo com a última ele diz ´expression evaluation not supported´.
Tem como eu manter essa soma dentro do select??
Valeu,
Eu uso o dbExpress para conectar ao banco.
Fiz mais uns testes aqui e o erro para estar numa soma que faço no select, vou lhe mostrar o código e talvez vc me ajude.
Select * From AGENDA
Where ContaUsr = ´SUPERVISOR´
AND Dia = ´09/04/2003´
AND CAST(Hora As Time) < ´10:30:00´
AND (CAST(Hora As Time) + CAST(Duracao As Time)) > ´10:01:00´
Aquele exemplo que havia dado anteriormente era hipotético pq com esse aqui algumas pessoas não entendiam.
Se eu tirar a última linha ele funciona, mas quando executo com a última ele diz ´expression evaluation not supported´.
Tem como eu manter essa soma dentro do select??
Valeu,
GOSTEI 0
Afarias
03/09/2003
ahh!! agora...
neste caso (somar campos hora), receio q vc tera q usar uma UDF. Nao sei se a UDF padrao do IB tem alguma funcao para este caso (como AddTime) e nao posso ver agora -- vc pode ver no arquivo ib_udf.sql em \examples\udf.
se nao tiver, escolha uma dessas UDFs aqui::
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_udf_libs
ou construa a sua.
E, so como comentario, o DBX pelo q sei suporta o Dialeto 3 do Interbase.
T+
neste caso (somar campos hora), receio q vc tera q usar uma UDF. Nao sei se a UDF padrao do IB tem alguma funcao para este caso (como AddTime) e nao posso ver agora -- vc pode ver no arquivo ib_udf.sql em \examples\udf.
se nao tiver, escolha uma dessas UDFs aqui::
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_udf_libs
ou construa a sua.
E, so como comentario, o DBX pelo q sei suporta o Dialeto 3 do Interbase.
T+
GOSTEI 0
Brumdrums
03/09/2003
Cara,
Valeuzão pela ajuda mas sou novato em IB e nunca ouvi falar de UDF, entrei no IBPhoenix mas não sei nem por onde começar a procurar.
Vou usar uma query auxiliar pra me retornar os dois campos que quero somar, aí eu somo por fora e se for ok continuo a execução da query.
Abraço,
Valeuzão pela ajuda mas sou novato em IB e nunca ouvi falar de UDF, entrei no IBPhoenix mas não sei nem por onde começar a procurar.
Vou usar uma query auxiliar pra me retornar os dois campos que quero somar, aí eu somo por fora e se for ok continuo a execução da query.
Abraço,
GOSTEI 0