Normalmente si quiero hacer una consulta en una tabla por rango de fechas que voy a hacer de esta manera:Haciendo caso omiso del año en consultas SQL con el periodo
SELECT DISTINCT c.ID AS 'id' FROM CUST c
JOIN TICKET t ON s.ID = t.SALE_ID
WHERE c.ACTIVE_IND = 1
AND t.DELIV_DATE BETWEEN '01-01-2012' AND '01-02-2012'
ORDER BY t.DELIV_DATE DESC
ahora tengo que hacer la misma consulta pero ignore el año, entonces puedo decir desde el 28 de febrero hasta el 2 de marzo y el año no importa.
He intentado modificar la consulta:
SELECT DISTINCT c.ID AS 'id' FROM CUST c
JOIN TICKET t ON s.ID = t.SALE_ID
WHERE c.ACTIVE_IND = 1
AND MONTH(t.DELIV_DATE) BETWEEN ... AND ...
AND DAY(t.DELIV_DATE) ... BETWEEN ...
ORDER BY t.DELIV_DATE DESC
Por encima de consulta funciona bien si el día de inicio es menor que el final. eso significa que si voy desde digamos del 20 de febrero al 28 de febrero funciona bien, pero si voy del 28 de febrero al 2 de marzo no funcionará.
¿Alguna solución para esto que pueda hacer que esto ocurra en una sola consulta?
que puedes usar DAYOFYEAR y MAKEDATE y los puso a todos a mismo año. Diga los dos con ser MAKEDATE (1971, DAYOFYEAR (t.DELIV_DATE)) entre MAKEDATE (1971, DAYOFYEAR ('01 -01-2012 ')) y MAKEDATE (1971, DAYOFYEAR ('01 -02-2012')) –
Gracias por usted comenta Sergey. Parece estar bien, pero las soluciones de deathApril parecen ser simples y menos complicadas. Sin embargo, debería ejecutar otras dos pruebas en él. – Tohid