ERRO: ORA-00904: DATEDIFF: identificador inválido

SQL Server

SQL

MySQL

Oracle

05/10/2015

Estou tentando fazer uma query que conte quantos dias há em um determinado período de datas.
Ex: De 01/01/2015 a 31/12/2015 tem 365 dias

SELECT DATEDIFF('31/12/2015', '01/01/2015')
FROM DUAL

ERRO: ORA-00904: "DATEDIFF": identificador inválido
André

André

Curtidas 0

Respostas

Marcos P

Marcos P

05/10/2015

Se for ORACLE... [url:descricao=https://docs.oracle.com/goldengate/1212/gg-winux/GWURF/column_conversion_functions011.htm#GWURF780]https://docs.oracle.com/goldengate/1212/gg-winux/GWURF/column_conversion_functions011.htm#GWURF780[/url]

Senão for, indique o banco.
GOSTEI 0
André

André

05/10/2015

É SQL
GOSTEI 0
Marcos P

Marcos P

05/10/2015

Sql server com prefixo "ORA" no erro ?

Estranho !

https://msdn.microsoft.com/pt-br/library/ms189794%28v=sql.120%29.aspx
GOSTEI 0
Marcos P

Marcos P

05/10/2015

Resolveu ?
GOSTEI 0
Marcos P

Marcos P

05/10/2015

André, você conseguiu resolver seu problema ?

Precisa de mais alguma ajuda adicional ?
GOSTEI 0
André

André

05/10/2015

Preciso de mais ajuda.

Não consegui com nenhuma dos dois exemplos ele fica dando o mesmo erro
GOSTEI 0
Marcos P

Marcos P

05/10/2015

Qual seu banco de dados ?

Sql Server ? Oracle ? MySql ? Firebird ?
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

Ola Marcos.

Penso que seja o formato de sua data (01/01/2015) tente 2015-01-01. Pelo menos no meu funcionou....
GOSTEI 0
Marcos P

Marcos P

05/10/2015

Sim o funcionamento é trivial, ainda mais com os exemplos que passei nos links acima.

Agora, sem a definição de qual banco de dados está sendo usado, fica difícil ajudar...
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

Pelo erro do código, eu consegui identificar que se trata de um bd da oracle (MySQL). É o mesmo que eu utilizo... a função DATEDIFF não funciona por conta do formato da data.
GOSTEI 0
Marcos P

Marcos P

05/10/2015

Se for MySql, segue o link da documentação dessa função : [url:descricao=https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff]https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff[/url]

Com exemplos...
GOSTEI 0
André

André

05/10/2015

- O meu banco é esse que o gisahchan disse oracle (MySQL)

- O Formato da data que eu uso aqui é 'dd/mm/aa'

- Usei pelo seu exemplo de MySql marcos e mesmo assim continua dando o mesmo erro

SELECT DATEDIFF ('01/01/2014 23:59:59', '31-12-2014')
FROM DUAL

Erro: ORA-00904: "DATEDIFF": identificador inválido
GOSTEI 0
André

André

05/10/2015

- O meu banco é esse que o gisahchan disse oracle (MySQL)

- O Formato da data que eu uso aqui é 'dd/mm/aaaa'

- Usei pelo seu exemplo de MySql marcos e mesmo assim continua dando o mesmo erro

SELECT DATEDIFF ('01/01/2014 23:59:59', '31-12-2014')
FROM DUAL

Erro: ORA-00904: "DATEDIFF": identificador inválido
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

Bom dia Andre.
As duas datas que você vai utilizar têm de estar no mesmo formato (aaaa-mm-dd).
GOSTEI 0
André

André

05/10/2015

Escrevi errado aqui kkkk, tentei com o mesmo formato e deu erro
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

veja:
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

[img:descricao=esqueci de mandar a imagen kkkk]http://arquivo.devmedia.com.br/forum/imagem/439048-20151007-093654.jpg[/img]
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

e esse DUAL seria sua tabela? que formato de data esta dentro dele? é char? date? datetime?
GOSTEI 0
André

André

05/10/2015

Veja:
[img]http://arquivo.devmedia.com.br/forum/imagem/457143-20151007-095451.jpg[/img]
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

Ok. Agora percebi. Se você for pegar um campo que contenha a data dentro de sua tabela você precisa fazer:

SELECT DATEDIFF(campo,'2014-12-31') , lembrado que o seu campo 'campo' tem de estar no formato Y-m-d, caso contrario vai dar erro.
O que você esta fazendo é tentando extrair a diferença de dois campos com formato errado, e além disso um deles possui também o horário... dessa forma não vai dar certo mesmo.
Você testou o que te falei no post acima? as duas datas apenas ( sem o horário) no formato ano-mes-dia?
GOSTEI 0
André

André

05/10/2015

Sim, continua dando erro..
Você não alguma outra forma de fazer sem usar o DATEDIFF não ?
GOSTEI 0
Gisely Santos

Gisely Santos

05/10/2015

pra calcular a diferença entre datas não sei. Mas o fato é que o problema não é a função, mas a forma como você esta fazendo.
Você quer calcular a diferença de dias de uma data do seu banco de dados? Esse DUAL seria sua tabela? Qual o nome do campo que esta com a data?
GOSTEI 0
Marcos P

Marcos P

05/10/2015

André,

O link que passei é a documentação oficial do MySql... não existe erro algum nos exemplos !

Se quiser confirmar, veja o exemplo que preparei em Fiddle
GOSTEI 0
André

André

05/10/2015

Eu preciso que ele me informe quantos dias tem em um determinado período de data.
Dual substitui uma tabela qualquer do sistema.
Se eu quiser pegar uma data qualquer do sistema usando from dual da certo.
GOSTEI 0
Marcos P

Marcos P

05/10/2015

Você testou os exemplos que preparei ?

Percebeu que :

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
2007-12-31 23:59:59 - 2007-12-30 = 1 ( dia )

SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31')
2010-11-30 23:59:59 - 2010-12-31 = -31 ( dias )

Qual parte disso, você não entendeu ?
GOSTEI 0
André

André

05/10/2015

Marcos, eu entendi a sua expressão.
O problema é quando eu jogo la no Oracle Sql Developer ele da erro ..
Dá identificador invalido no DATEDIFF
GOSTEI 0
POSTAR