O Blog SQLpro

, Author

Aqui estão várias formas de escrever uma função de sobreposição de intervalos para o MS SQL Server.
Teste de sobreposição de intervalos permite saber, por exemplo, se dois períodos se sobrepõem. Isto é por vezes essencial na gestão de horários para evitar que a mesma pessoa tenha de estar presente em dois locais diferentes ao mesmo tempo ou que o mesmo local esteja ocupado ao mesmo tempo…
Existe uma função SQL fornecida para isto de não-OVERLAPS na norma SQL. Contudo, a escrita desta função pode influenciar grandemente o desempenho. É por isso que veremos diferentes formas de tal escrita.

AVISO: não são consideradas sobreposição de um intervalo que começa ou termina (igualdade dos limites “fim” do anterior e “início” do seguinte). De facto, por uma questão de princípio, considera-se que todos os intervalos têm limites fechados à esquerda e abertos à direita -].

Intervalos de sobreposiçãobr>Intervalos de sobreposição
Intervalles sans chevauchementIntervalos não sobrepostos

br>Intervalos não sobrepostos

0 – A formulação do predicado normativo OVERLAPS é a seguinte

::=
::=
::= SOBRE OS PAISES
::=
::=

Regras Gerais
1) Se o valor da linha predicand 1 for o valor nulo ou o valor da linha predicand 2 for o
valor nulo, então o resultado da sobreposição do predicand é Desconhecido e não são aplicadas mais Regras Gerais deste
Subcláusula.
2) Seja D1 o valor do primeiro campo do valor de linha predicand 1 e D2 o valor do primeiro campo de
valor de linha predicand 2.
3) Caso:
a) Se o tipo mais específico do segundo campo do valor de linha predicand 1 for um tipo de dados datetime, então
let E1 seja o valor do segundo campo do valor de linha predicand 1.
b) Se o tipo mais específico do segundo campo do valor de linha previsto e 1 for INTERVALO, então que I1 seja
o valor do segundo campo do valor de linha previsto e 1. Que E1 = D1 + I1.
4) Se D1 for o valor nulo ou se E1 inf D1, então que S1 = E1 e que T1 = D1. Caso contrário, deixe S1 = D1 e deixe T1
= E1.
5) Caso:
a) Se o tipo mais específico do segundo campo de previsão do valor da linha e 2 for um tipo de dados de data e hora, então
let E2 seja o valor do segundo campo de previsão do valor da linha e 2.
b) Se o tipo mais específico do segundo campo de previsão do valor da linha e 2 for INTERVALO, então deixe I2 ser
o valor do segundo campo de previsão do valor da linha e 2. Deixe E2 = D2 + I2.
6) Se D2 é o valor nulo ou se E2 inf D2, então deixe S2 = E2 e deixe T2 = D2. Caso contrário, deixar S2 = D2 e deixar T2
= E2.
7) O resultado da sobreposição do predicado é o resultado da seguinte expressão:

( S1 > S2 E NÃO ( S1 >= T2 E T1 >= T2 ) )
OR
( S2 > S1 AND NOT ( S2 >= T1 AND T2 >= T1 ) )
OR
br>( S1 = S2 AND ( T1 T2 OU T1 = T2 ) )

NOTA : le terme inf étant le caractère :
<

p>Cette définition inclue une problématique qui est qu’un intervalle peut avoir une borne indéfinie, par exemple venir d’un passé lointain, comme de ne pas savoir quand il va se terminer et dans les deux cas, l’une des bornes peut être NULL (voire les deux).

Intervalos com limites abertos sobrepostosbr>Intervalos com limites abertos sobrepostos
Intervalos com limites abertos não sobrepostosbr>Intervalos com limites abertos não sobrepostos

1 – teste de sobreposição para MS SQL Server:

CREATE FUNCTION dbo.f_overlaps (@i1_begin DATETIME2(0), @i1_end DATETIME2(0),
@i2_begin DATETIME2(0), @i2_end DATETIME2(0))
RETURNS BIT
AS
BEGIN
/* Nous suposons qu'aucun défaut de coordination de temps n'est possible (contrainte CHECK dans la table). Si ce n'est pas le cas :
IF @i1_begin > @i1_end RETURN NULL;
IF @i2_begin > @i2_end RETURN NULL;
*/
-- pas de chevauchement si l'un des intervalle est avant ou après l'autre :
IF @i2_begin >= @i1_end RETURN 0;
IF @i2_end <= @i1_begin RETURN 0;
-- sinon, chevauchement :
RETURN 1;
END;
--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

Microsoft SQL Server MVP

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *