 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
corohsnk Aprendiz

Registrado: Sexta-Feira, 27 de Janeiro de 2012 Mensagens: 176
|
Enviada: Ter Jul 22, 2014 3:42 pm Assunto: Campo Varchar guardando Datas |
|
|
Amigos, um cidadão brasileiro que trabalhava onde estou trabalhando no momento criou no banco de dados do sistema um campo VARCHAR para guardar datas e agora o cliente pediu um relatorio que preciso desse campo , por ser VARCHAR quando eu faço( campo >= '31/12/2013' and campo <= '31/12/2014') o sistema puxa muitos registro até registro que nao tem essas datas, eu entendo que por ser varchar ele nao calcule direito, enfim, estou tentando utilizar o Cast porem no banco o registro está assim '31/12/2013' e quando uso cast(dataprodutos as Date) = '11/11/2011' ele da erro pois tem que ser '11.11.2011' com ponto final e nao com barra, alguem poderia me ajudar?, ja tentei com CONVERT tambem mas não funcionou |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jul 22, 2014 3:57 pm Assunto: |
|
|
Boa tarde,
Se o banco de dados for o Firebird versão 2.1 ou mais recente, experimente adicionar a função Replace para trocar as barras por pontos:
Código: | cast(replace(dataprodutos, '/', '.') as Date) |
O problema do Cast é que vai ocorrer um erro se houver algum registro com uma data inválida (ex: 30.02.2014)
Espero que ajude.
Editado pela última vez por imex em Qua Mar 08, 2023 11:59 am, num total de 1 vez |
|
Voltar ao Topo |
|
 |
corohsnk Aprendiz

Registrado: Sexta-Feira, 27 de Janeiro de 2012 Mensagens: 176
|
Enviada: Ter Jul 22, 2014 4:02 pm Assunto: |
|
|
nossa nem tinha pensando no replace, ajudou e muito , agora existe mais 1 problema , as datas estão salvas assim DD/MM/YYYY, e para que funcione pede assim YYYY/MM/DD, tem algum comando que inverta isso? |
|
Voltar ao Topo |
|
 |
souzacruz001 Aprendiz

Registrado: Quarta-Feira, 11 de Junho de 2014 Mensagens: 273
|
Enviada: Ter Jul 22, 2014 4:02 pm Assunto: |
|
|
Boa tarde.
Eu já tive esses mesmo problema durante uma migração, o campo também era VARCHAR.
O banco de dados era Oracle, então eu fazia a copia das partes da data, por exemplo:
Código: |
select cast(dia || '.' || mes || '.' || ano as date) as data from (
select SUBSTR('01/01/2012', 1, 2) as dia, SUBSTR('01/01/2012', 4, 2) as mes, SUBSTR('01/01/2012', 7, 4) as ano from sua_tabela )
|
No Oracle, para fazer um Copy utiliza o "SUBSTR", no PostgreSQL e Firebird usa o "substring'. Se o seu banco for diferente, basta pesquisar na documentação.
Esperto ter ajudado. |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jul 22, 2014 4:03 pm Assunto: |
|
|
Passei pela mesma situação na empresa onde trabalho.
Comigo funcionou o "Convert" no SQL.
Código: |
Select NomeUsu, Convert(Char(10), DataLog,103) As DataLog,
EstaLog, AtivLog, Convert(Char(8), HoraLog, 8) As HoraLog From AsccAtiv
|
Segue uma tabela para conversão e os modos de saída:
Código: |
select convert(char, getdate(), 100) --mon dd yyyy hh:mmAM (or PM)
select convert(char, getdate(), 101) --mm/dd/yyyy
select convert(char, getdate(), 102) --yyyy.mm.dd
select convert(char, getdate(), 103) --dd/mm/yyyy
select convert(char, getdate(), 104) --dd.mm.yyyy
select convert(char, getdate(), 105) --dd-mm-yyyy
select convert(char, getdate(), 106) --dd mon yyyy
select convert(char, getdate(), 107) --mon dd, yyyy
select convert(char, getdate(), 108) --hh:mm:ss
select convert(char, getdate(), 109) --mon dd yyyy hh:mm:ss:mmmAM (or PM)
select convert(char, getdate(), 110) --mm-dd-yyyy
select convert(char, getdate(), 111) --yyyy/mm/dd
select convert(char, getdate(), 112) --yyyymmdd
select convert(char, getdate(), 113) --dd mon yyyy hh:mm:ss:mmm
select convert(char, getdate(), 114) --hh:mm:ss:mmm(24h)
select convert(char, getdate(), 120) --yyyy-mm-dd hh:mm:ss(24h)
select convert(char, getdate(), 121) --yyyy-mm-dd hh:mm:ss.mmm
|
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
corohsnk Aprendiz

Registrado: Sexta-Feira, 27 de Janeiro de 2012 Mensagens: 176
|
Enviada: Ter Jul 22, 2014 4:05 pm Assunto: |
|
|
Estou utilizando Firebird 2.1
natanbh1 não sei porq mas quando uso
select convert(char, getdate(), 103) ele apresenta erro na virgual depois do CHAR |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jul 22, 2014 4:06 pm Assunto: |
|
|
Qual a mensagem de erro ? _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
corohsnk Aprendiz

Registrado: Sexta-Feira, 27 de Janeiro de 2012 Mensagens: 176
|
Enviada: Ter Jul 22, 2014 4:08 pm Assunto: |
|
|
Citação: | Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 42.
,. |
select * from produtos where convert(date, dataprodutos,103) = '19/07/2013' |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jul 22, 2014 4:13 pm Assunto: |
|
|
Neste seu exemplo, troque "date" por "Char(10)".
Entre parenteses do char coloque o tamanho do seu campo string.
Código: |
select * from produtos where convert(Char(10), dataprodutos, 103) = '19/07/2013'
|
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
corohsnk Aprendiz

Registrado: Sexta-Feira, 27 de Janeiro de 2012 Mensagens: 176
|
Enviada: Ter Jul 22, 2014 4:15 pm Assunto: |
|
|
da este erro
Citação: | Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 40.
char. |
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jul 22, 2014 4:31 pm Assunto: |
|
|
corohsnk escreveu: | nossa nem tinha pensando no replace, ajudou e muito , agora existe mais 1 problema , as datas estão salvas assim DD/MM/YYYY, e para que funcione pede assim YYYY/MM/DD, tem algum comando que inverta isso? |
Pelo que vi se você utilizar o ponto como separador o formato esperado é 'DD.MM.YYYY':
http://www.firebirdfaq.org/faq137/
Espero que ajude. |
|
Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jul 22, 2014 4:46 pm Assunto: |
|
|
Desculpe, agora vi no seu outro post o BD que você usa.
O Convert não funciona no Firebird. Tente usar o Cast mesmo. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|