Web design and hosting, database, cloud and social media solutions that deliver business results
  • Soluciones de negocios
    • Automatización Robótica de Procesos
    • Software
    • Servicios de bases
      • Actualización del servidor y servicios de DBA
      • BI de energía
      • Integración de datos
      • Informes
    • Diseño web
      • Diseño de logo
      • Optimización del sitio web
      • Seguridad del sitio web
      • Traducción y localización web
      • Via de pago
      • Herramientas técnicas
    • Servicios en la nube
      • Servicios en la nube de Google
      • Servicios web de Amazon
      • microsoft azure
    • Medio Social
    • Microsoft Office
    • Hardware de TI
  • Academia
    • Nuestro entorno de prueba
    • Diseño de base de datos de aprendizaje
      • Los basicos
      • Obtener consulta abierta
      • Usando datos del servidor SQL
      • SQL Server 2008 para planes de mantenimiento
      • Usar fechas de SQL Server
      • Uso de las funciones de SQL Server
      • Uso de SQL Server Pivot-Unpivot
    • Aprendiendo Diseño Web
      • Creación del sistema de gestión de contenido de Ousia
      • ASP-NET
      • CSS
      • Usando JavaScript
    • Uso de las redes sociales
      • Cambiar una cuenta de Facebook de personal a empresa
      • Elegir dónde enfocar el esfuerzo de las redes sociales
      • Solicitar una revisión de Google
      • Tamaños de imagen de redes sociales
      • Uso de metadatos para configurar imágenes de redes sociales
    • Aprendizaje en la nube y servicios de TI
      • Error del programador de tareas 2147943645
      • Solicitud de SSL y generación de archivo PFX en OpenSSL Simple Steps
  • Acerca de
    • Blog
      • Actualización principal de Google, enero de 2020
      • Cierre de Internet de Hot Chilli
      • Cómo elegir el contenido de los folletos publicitarios de su sitio web
      • Construyendo una máquina de juego de nivel de entrada
      • Las cosas más molestas de los sitios web en Internet
      • Los 5 mejores sitios web para obtener gráficos vectoriales gratuitos
      • Prevención de estafas en línea
      • Skimmers de la gig economy
    • Carreras
      • Traductor inglés-español
      • Traductor inglés-japonés
    • Equipo
      • Ali Al Amine
      • Ayse Hur
      • Chester Copperpot
      • Gavin Clayton
      • Sai Gangu
      • suneel kumar
      • Surya Mukkamala
    • Portafolio
English (EN-GB)English (EN-US)Español (ES)हिंदी (HI)italiano (IT)日本語 (JA)

Cláusulas WHERE de SQL con intervalos de fechas: ¿qué es lo mejor?

Examina la forma en que se manejan las fechas dentro de las cláusulas WHERE de SQL Server, y la mejor manera de utilizarlas

Contexto

Uso de datos de SQL Server

Debido a la legislación sobre protección de datos, determinados datos deben eliminarse de los sistemas en un plazo determinado, que en la mayoría de los casos es de siete años.

Al investigar esto en las instalaciones de un cliente, obtenían resultados extraños cuando comprobábamos la consulta que nos habían enviado.

SQL

SELECT *FROM AccountsWHERE DATEDIFF(YEAR,ClosedDate,GETDATE())>=7

Crear una tabla de prueba

Ahora esto trajo lo que parecía el volumen correcto, sin embargo en una inspección más detallada había más cuentas en comparación con si yo hiciera una fecha estática siete años antes, entonces, ¿por qué lo hace?

He creado el siguiente código para investigarlo.

SQL

DECLARE @Records TABLE (RecordID INT,RecordClosed DATETIME)DECLARE @InsRecID INT = 1DECLARE @InsRecDate DATE=DATEADD(YEAR,-8,GETDATE())WHILE @InsRecDate      INSERT INTO @Records      SELECT @InsRecID,@InsRecDate      SET @InsRecID = @InsRecID+1      SET @InsRecDate=DATEADD(DAY,1,@InsRecDate)ENDDECLARE @DateFrom DATE=DATEADD(YEAR,-7,GETDATE())SELECT MAX(RecordClosed) FROM @RecordsSELECT MAX(RecordClosed) FROM @Records WHERE DATEDIFF(YEAR,RecordClosed,getdate())>=7SELECT MAX(RecordClosed) FROM @Records WHERE RecordClosed<@DateFromSELECT MAX(RecordClosed) FROM @Records WHERE RecordClosed<=@DateFromSELECT MAX(RecordClosed) FROM @Records WHERE DATEDIFF(DAY,RecordClosed,getdate())/365.25>7

Probando

Esto traerá los siguientes resultados cuando se ejecuta el 21/03/2013

Resultados

2007-03-21 00:00:00.000

2006-12-31 00:00:00.000

2006-03-20 00:00:00.000

2006-03-21 00:00:00.000

2006-03-21 00:00:00.000

¿Qué es correcto?

El primer registro es sólo la fecha más grande en la tabla temporal, así que está bien.

El segundo registro ha recogido todas las cuentas hasta finales de 2006, esto podría haber sido un problema potencial ya que se habrían eliminado demasiados datos. DATEDIFF en el año es puramente la comprobación de que el año es hace 7 años.

El tercer y cuarto registro son los que queremos, dependiendo de si se quiere incluir el día de hace siete años dentro o fuera.

El quinto registro, aunque es correcto cuando se ejecuta, está utilizando cálculos de año bisiesto, y en aras de la exactitud no se podría confiar si tuviera que ser específico.

Diferencia de velocidad

Mientras comprobaba los registros, lo ejecuté en el sistema comprobando 2.500.000 registros para 3 y 5 arriba.

El enunciado 5 devolvió nuestro resultado en 6 segundos, el enunciado 3 en sólo 3 segundos, así que no sólo estábamos ahora seguros de que éramos precisos, sino que también procesábamos los registros más rápidamente.

Intenta usar una fecha adecuada cuando consultes fechas, espero que esto ayude a alguien que se esté rascando la cabeza.

Autor

Te ha sido útil?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

Site Links

RSSLoginLink Política de cookiesmapa del sitio

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom

Partnered With

La configuración de este sitio está configurada para permitir todas las cookies. Éstos se pueden cambiar en nuestra página de configuración y política de cookies. Al continuar utilizando este sitio, usted acepta el uso de cookies.
Ousia Logo
Logout
Ousia CMS Loader