Número de dias entre duas datas - ANSI SQL
-
05-07-2019 - |
Pergunta
Eu preciso de uma maneira de determinar o número de dias entre duas datas em SQL.
resposta deve ser ANSI SQL.
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