tutorial scraping not nonaggregated isn column and sql sql-server tsql where between

scraping - SQL: ENTRE vs<= y>=



web scraper python 3 (9)

Aunque BETWEEN es fácil de leer y mantener, rara vez recomiendo su uso porque es un intervalo cerrado y, como se mencionó anteriormente, puede ser un problema con las fechas, incluso sin componentes de tiempo.

Por ejemplo, cuando se trata de datos mensuales, a menudo es común comparar fechas BETWEEN first AND last , pero en la práctica esto generalmente es más fácil escribir dt >= first AND dt < next-first (que también resuelve el problema de la parte de tiempo) determinar el last generalmente es un paso más que determinar el next-first (restando un día).

Además, otra cuestión es que los límites inferior y superior deben especificarse en el orden correcto (es decir, entre BETWEEN low AND high ).

En SQL Server 2000 y 2005:

  • ¿Cuál es la diferencia entre estas dos cláusulas WHERE ?
  • ¿Cuál debería usar en qué escenarios?

Consulta 1:

SELECT EventId, EventName FROM EventMaster WHERE EventDate BETWEEN ''10/15/2009'' AND ''10/18/2009''

Consulta 2:

SELECT EventId, EventName FROM EventMaster WHERE EventDate >=''10/15/2009'' AND EventDate <=''10/18/2009''

(Editar: el segundo Eventdate fue originalmente perdido, por lo que la consulta fue sintácticamente incorrecta)


Como se menciona por @marc_s, @Cloud, et al. son básicamente lo mismo para un rango cerrado.

Pero cualquier valor de tiempo fraccional puede causar problemas con un rango cerrado (mayor o igual y menos o igual ) a diferencia de un rango medio abierto (mayor o igual que menor que ) con un valor final después de la último posible instante.

Entonces, para evitar que la consulta se deba reescribir como sigue:

SELECT EventId, EventName FROM EventMaster WHERE (EventDate >= ''2009-10-15'' AND EventDate < ''2009-10-19'') /* <<<== 19th, not 18th */

Como BETWEEN no funciona para intervalos medio abiertos siempre miro detenidamente cualquier consulta de fecha / hora que lo use, ya que probablemente sea un error.


Creo que la única diferencia es la cantidad de azúcar sintáctica en cada consulta. BETWEEN es solo una manera elegante de decir exactamente lo mismo que la segunda consulta.

Puede haber alguna diferencia específica de RDBMS de la que no estoy al tanto, pero realmente no lo creo.


Ellos son lo mismo.

Una cosa de la que debe tener cuidado es si usa esto en DATETIME, la coincidencia para la fecha de finalización será el comienzo del día:

<= 20/10/2009

no es lo mismo que:

<= 20/10/2009 23:59:59

(coincidiría con <= 20/10/2009 00:00:00.000 )


Lógicamente no hay diferencia en absoluto. En lo que respecta al rendimiento, hay -típicamente, en la mayoría de DBMSes- ninguna diferencia.


Normalmente, no hay diferencia: la palabra clave BETWEEN no es compatible con todas las plataformas RDBMS, pero si lo es, las dos consultas deberían ser idénticas.

Dado que son idénticos, en realidad no hay distinción en términos de velocidad o cualquier otra cosa: utiliza el que te parezca más natural.


Son idénticos: BETWEEN es una abreviatura de la sintaxis más larga en la pregunta.

Use una sintaxis más larga alternativa donde BETWEEN no funciona, por ejemplo

Select EventId,EventName from EventMaster where EventDate >= ''10/15/2009'' and EventDate < ''10/18/2009''

(Nota < lugar de <= en segunda condición)


Tengo una ligera preferencia por BETWEEN porque al instante deja claro al lector que está comprobando un campo para un rango . Esto es especialmente cierto si tiene nombres de campo similares en su tabla.

Si, por ejemplo, nuestra tabla tiene una fecha de transactiondate y una fecha de transitiondate , si leo

transactiondate between ...

Sé de inmediato que ambos extremos de la prueba están en contra de este campo.

Si leo

transactiondate>=''2009-04-17'' and transactiondate<=''2009-04-22''

Tengo que tomar un momento extra para asegurarme de que los dos campos sean iguales.

Además, como una consulta se edita con el tiempo, un programador descuidado podría separar los dos campos. He visto muchas consultas que dicen algo así como

where transactiondate>=''2009-04-17'' and salestype=''A'' and customernumber=customer.idnumber and transactiondate<=''2009-04-22''

Si prueban esto con BETWEEN , por supuesto, será un error de sintaxis y se corregirá rápidamente.


Vea esta excelente publicación en el blog de Aaron Bertrand sobre por qué debería cambiar su formato de cadena y cómo se manejan los valores límite en las consultas de rango de fechas.