La idea aquí es utilizar la regla de implicación de reescritura:
IF (x) THEN (y) is equivalent to (NOT (x) OR y)
En su caso
IF (DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16)
THEN (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1)
es equivalente a
(NOT (DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1))
y es a su vez equivalente a
((DATEPART(HOUR, CURRENT_TIMESTAMP) < 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1))
Reescribiendo la cláusula original, ELSE
como una declaración IF..THEN
por derecho propio:
IF (DATEPART(HOUR, CURRENT_TIMESTAMP) < 16)
THEN (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0)
es equivalente a (esta vez Omisión del paso intermedio)
((DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0))
Los dos expresión puede entonces escribir en forma normal conjuntiva ("una serie de AND
s)
SELECT *
FROM the_table
WHERE ((DATEPART(HOUR, CURRENT_TIMESTAMP) < 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1))
AND
(((DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0)) ;
Hola RobIII, amigo. Solo quería decir que te devolví el voto, pero los votos a favor pueden ser el resultado de las conversaciones en esta publicación. No se lo tome como algo personal, todos podemos aprender algo :) Simplemente recuerde pensar en lo que está diciendo mientras lo publica y considere cómo podría llegar a otros. Yo y otros aquí luchamos arduamente para hacer de TAN una comunidad amigable que dé la bienvenida a todos los niveles de habilidad y les da a todos una oportunidad. Parece que la tuya también ha sido marcada como la respuesta, ¡felicidades y que tengas un gran día! – mellamokb
Roblll, Te he subido de nivel y si te hace sentir mejor, me gustaría decir que implementé tu código ya que parecía muy eficiente. Por supuesto, me tomó un tiempo entenderlo. :) Muchas gracias – user1345260