Pergunta

Eu preciso de uma maneira de determinar o número de dias entre duas datas em SQL.

resposta deve ser ANSI SQL.

Foi útil?

Solução

ANSI SQL-92 define DATA - DATA como retornar um tipo de intervalo. Você é suposto ser capaz de extrair escalares de INTERVALOS usando o mesmo método que extrai-los a partir de datas usando - apropriadamente -. A função EXTRACT (4.5.3)

opera em uma data e hora ou intervalo e retorna uma valor numérico exato que representa a valor de um componente do datetime ou intervalo.

No entanto, isso é muito mal implementada na maioria dos bancos de dados. Você provavelmente está preso usando específicos de banco de dados de alguma coisa. DATEDIFF é muito bem implementado em diferentes plataformas.

Aqui está a maneira "real" de fazê-lo.

SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;

Boa sorte!

Outras dicas

Não me lembro usando um RDBMS que não apoiou DATE1-DATE2 e SQL 92 parece concordar.

Eu acredito que os SQL-92 suporta o padrão de subtrair duas datas com o '-'. Operador

SQL 92 apoios a seguinte sintaxe:

t.date_1 - t.date_2

A função EXTRACT também é ANSI, mas não é suportado no SQL Server. Exemplo:

ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)

Embalagem o cálculo de uma função de valor absoluto garante o valor sairá como positivo, mesmo se uma data menor é a primeira data.

EXTRATO é suportado em:

  • Oracle 9i +
  • MySQL
  • Postgres
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top