Filtrado por mes() en ACCESS
Resuelto
JV-Vierzon
-
Jean_Jacques Mensajes publicados 1045 Fecha de registro Estado Miembro Última intervención -
Jean_Jacques Mensajes publicados 1045 Fecha de registro Estado Miembro Última intervención -
Hola,
En Access, en una consulta, quiero filtrar fechas con las funciones Mes() y Año(). Tengo un campo "Fecha", he creado 2 campos:
- Año: Año([Fecha]) con condición de filtrado [Año :]
- Mes: Mes([Fecha]) con condición de filtrado <[N° del mes ?]
Al ejecutar la consulta, el filtrado funciona para el año (registros del año ingresado en la pregunta [Año:]), pero no para el mes: por ejemplo, al ingresar 2 (febrero), la visualización me da los registros de enero (correcto) pero también los de octubre (10), noviembre (11) y diciembre (12); como si mes() fuera un valor alfanumérico...
Con [N° del mes ?] (igual), funciona.
¿Dónde está el error?
Gracias de antemano.
En Access, en una consulta, quiero filtrar fechas con las funciones Mes() y Año(). Tengo un campo "Fecha", he creado 2 campos:
- Año: Año([Fecha]) con condición de filtrado [Año :]
- Mes: Mes([Fecha]) con condición de filtrado <[N° del mes ?]
Al ejecutar la consulta, el filtrado funciona para el año (registros del año ingresado en la pregunta [Año:]), pero no para el mes: por ejemplo, al ingresar 2 (febrero), la visualización me da los registros de enero (correcto) pero también los de octubre (10), noviembre (11) y diciembre (12); como si mes() fuera un valor alfanumérico...
Con [N° del mes ?] (igual), funciona.
¿Dónde está el error?
Gracias de antemano.
4 respuestas
-
Buenas noches JV-Vierzon,
Al adaptar esta consulta, solo trabajará sobre el campo fecha.
Y, por lo tanto, si introduce: 12 como ordinal y: 2010 como año, listará directamente los registros de diciembre de 2010.
SELECT TRANSACTIONS.DateSaisie, TRANSACTIONS.RéfValeur, DatePart("m",[Datesaisie]) AS Mes, DatePart("yyyy",[Datesaisie]) AS Año
FROM TRANSACTIONS
WHERE (((DatePart("m",[Datesaisie]))=[ Tantième du mois ? ]) AND ((DatePart("yyyy",[Datesaisie]))=[ Millésime ? ]))
ORDER BY DatePart("m",[Datesaisie]);
Cordialement
--
La ciencia solo encuentra lo que siempre ha existido.
REEVES Hubert.-
Hola Jean-Jacques Gracias por la rapidez de su respuesta. Pero sigo teniendo el mismo problema: esta consulta funciona bien para buscar los registros de un mes dado: SELECT [26_01_ProduitsColis].N°Annuaire, [26_01_ProduitsColis].Date, DatePart("m",[Date]) AS Mois FROM 26_01_ProduitsColis WHERE (((DatePart("m",[Date]))=[ Tantième du mois ? ]) AND ((DatePart("yyyy",[Date]))=[ Millésime ? ])) ORDER BY DatePart("m",[Date]); Pero para filtrar los registros de meses anteriores: SELECT [26_01_ProduitsColis].N°Annuaire, [26_01_ProduitsColis].Date, DatePart("m",[Date]) AS Mois FROM 26_01_ProduitsColis WHERE (((DatePart("m",[Date]))<[ Tantième du mois ? ]) AND ((DatePart("yyyy",[Date]))=[ Millésime ? ])) ORDER BY DatePart("m",[Date]); Para un millésime con valor 2 (febrero), los registros de los meses 2 a 9 están efectivamente bloqueados pero no para los meses 10, 11 y 12. Fuera de estos números, valor del mes, son numéricos (?) y 10 a 12 no deberían considerarse < 2. El filtro parece alfabético al considerar estos valores como cadenas: "2" efectivamente es mayor que "10", "11" y "12" que empiezan por 1. Gracias de antemano por sus luces. Jean
-
Hola
Aquí tienes un ejemplo de consulta con parámetro
donde se indica la elección del mes y del año
SELECT TRANSACCIONES.Fechaingreso, DatePart("m",[Fechaingreso]) AS Mes, DatePart("yyyy",[Fechaingreso]) AS Años
FROM TRANSACCIONES
WHERE (((DatePart("m",[Fechaingreso]))=[Qué Mes]) AND ((DatePart("yyyy",[Fechaingreso]))=[Qué Año]))
ORDER BY DatePart("m",[Fechaingreso]);
-
-
Hola JV-Vierzon,
Por falta de mejor, aquí hay una solución aproximada.
Porque parece que el argumento <= se respeta estrictamente, mientras que, extrañamente, < utilizado solo no lo está......
Le dejo apreciar, o no...
SELECT TRANSACTIONS.DateSaisie, TRANSACTIONS.RéfValeur, DatePart("m",[Datesaisie]) AS Mes, DatePart("yyyy",[Datesaisie]) AS Año
FROM TRANSACTIONS
WHERE (((DatePart("m",[Datesaisie]))<=[ ¿Tantième del mes ? ]) AND ((DatePart("yyyy",[Datesaisie]))=[ ¿Año? ]));
Cordialement
--
La ciencia solo encuentra lo que existe desde siempre.
REEVES Hubert. -
Hola JV-Vierzon,
Los puristas solo lo apreciarán moderadamente, pero ... funciona ...
- Inserta - 1 tras -> [¿Quinto del mes?] -1
La consulta lista los registros anteriores al valor del quinto del mes ingresado ...
SELECT TRANSACTIONS.DateSaisie, TRANSACTIONS.RéfValeur, DatePart("m",[Datesaisie]) AS Mes, DatePart("yyyy",[Datesaisie]) AS Año
FROM TRANSACTIONS
WHERE (((DatePart("m",[Datesaisie]))<=[ ¿Quinto del mes? ]-1) AND ((DatePart("yyyy",[Datesaisie]))=[ Año ? ]))
ORDER BY DatePart("m",[Datesaisie]);
Cordialement -
Bonjour Jean-Jacques.
Merci pour votre aide qui m'a aidé dans cette recherche. La solution suivante fonctionne:
SELECT [26_01_ProduitsColis].N°Annuaire, [26_01_ProduitsColis].Date, DatePart("m",[Date]) AS Mois, DatePart("yyyy",[Date]) AS Année
FROM 26_01_ProduitsColis
WHERE (((DatePart("m",[Date]))<Val([N° du mois :])) AND ((DatePart("yyyy",[Date]))=[Année :]))
ORDER BY DatePart("m",[Date]);
L'utilisations de la fonction VAL() force la mise ne numérique de mes données dans [N° du mois :].
Je pense que c'est équivalent au -1 proposé (solution que j'ai déjà utilisé dans Excel lors de copier-coller pour forcer les valeurs à être en numérique: Collage spécial/Multiplier dans une colonne remplie de 1).
Ce qui est bizarre, c'est que la valeur, toujours un chiffre, entrée dans la variable [N° du mois :] soit considérée, par défaut, comme une chaîne de caractère par ACCESS et qu'il puisse la comparer à une valeur normalement numérique: Mois().
Mon retour dans les bases de données que j'avais quittées il y a quelques années (DBase sur Amstrad) est bien laborieux.
Par contre, il n'y avait pas à cette époque d'Internet et de forums comme le vôtre qui sont d'une grande aide.
Merci à ceux qui donnent de leur temps pour nous aider.
Amicalement.
JV-Vierzon-
Hola JV-Vierzon, Val() : Me arrepiento, ¡es tan evidente! Sobre AMSTRAD, la tía de la gran época, Marion VANNIER, vive ahora de sus rentas (!). Ella habla en reportajes de los inicios heroicos de la marca así como del final bastante discreto de esta empresa. También conocí DBASE IV. En aquel entonces pensé que no habría nada mejor... Igual que para AMSTRAD, por cierto..... Conclusión: Vivimos una época interesante Que tengas un buen día
-