{Acceso} La fecha y el día de la semana

Burgerdash -  
burgerdash Mensajes publicados 47 Estado Miembro -
Hola,
ya he recurrido a su ayuda en este hilo (https://forums.commentcamarche.net/forum/affich-16037923-access-tri-de-doublons). Habiendo progresado un poco, me enfrento a nuevos problemas y pensé que era mejor crear un nuevo hilo porque el problema no es el mismo. ¿Debí haber publicado como respuesta?

En mi base de datos de Access 2003 tengo un campo "Fecha" donde ingreso una fecha en el formato dd/mm/aaaa, y donde luego aparece en el formato "NombreDelDía dd mes aaaa". Por nombre del día, me refiero a lunes, martes, miércoles... Perfecto, justo necesito saber cuántos clientes vinieron los lunes, cuántos los martes, cuántos los miércoles... Desafortunadamente, el nombre del día se muestra en la pantalla pero no es utilizable por la base de datos. De hecho, no puedo clasificar mis datos en una consulta de forma que pueda agruparlos por día de la semana, solo en orden cronológico bobo. No sé si estoy siendo realmente claro. En caso de duda, nada como un buen ejemplo. Aquí está lo que ingreso en mi tabla:

Clientes | Fecha de compra
Cliente 1 | 07/01/10
Cliente 2 | 08/01/10
Cliente 3 | 14/01/10
Cliente 4 | 16/01/10
Cliente 5 | 16/01/10

Esto es lo que se muestra cuando mi cursor sale del campo "Fecha de compra":

Clientes | Fecha de compra
Cliente 1 | sábado 7 de enero de 2010
Cliente 2 | domingo 8 de enero de 2010
Cliente 3 | sábado 14 de enero de 2010
Cliente 4 | lunes 16 de enero de 2010
Cliente 5 | lunes 16 de enero de 2010

Este es el tipo de información que me gustaría obtener:

Lunes: 2 clientes
Martes: 0 cliente
Miércoles: 0 cliente
Jueves: 0 cliente
Viernes: 0 cliente
Sábado: 2 clientes
Domingo: 1 cliente
(en un bonito gráfico, por supuesto, pero eso después ya sé cómo hacerlo)

Esto es lo que actualmente puedo obtener:
Enero: 5 clientes
O
07/01/10: 1 cliente
08/01/10: 1 cliente
14/01/10: 1 cliente
16/01/10: 2 clientes

He intentado una antigua táctica de indio consistente en agregar un campo "día de la semana" al lado de la fecha, donde simplemente copio el nombre del día de la semana que se muestra al lado. Pero:
1. es tedioso de usar
2. tengo la impresión de que estoy usando un martillo para abrir un huevo Kinder (seguramente existe una función que puede evitar estas molestias... ¿verdad?)
3. mis datos terminan clasificados en orden alfabético por día (Domingo, jueves, lunes...), y eso se ve feo.

... ¿Puede alguien ayudarme? :x
Configuración: Windows XP Firefox 3.5.7

32 respuestas

  • 1
  • 2
  1. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
     
    Hola,

    mira la función datepart, te permite extraer lo que quieras de una fecha...

    --

    A+ Blux
     "Los tontos se atreven a todo. Es incluso por eso que se les reconoce" 
    0
  2. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    Hola

    1° Has hecho bien en abrir un nuevo post, cada post tiene su problema

    Entonces, para tu problema, ¿quieres la suma de todas las personas que vinieron un lunes durante un mes?
    o
    ¿todas las personas que vinieron un lunes en particular?
    0
    1. Burgerdash
       
      blux, ¿cómo "miro la función datepart"?

      moiced59, en realidad quiero tener la suma de todas las personas que vinieron un lunes desde la apertura de mi base de datos, lo mismo para el martes, el miércoles...

      Jean-Jacques, voy a intentar eso de inmediato :) Gracias por su ayuda.
      0
  3. Jean_Jacques Mensajes publicados 1045 Fecha de registro   Estado Miembro Última intervención   112
     
    Hola Burgerdash,

    Aquí está la sintaxis para obtener el valor literal de <Champ_date>:

    Día literal: Formato([<Champ_date>];"\ dddd")

    - A introducir en 'campo' de la interfaz gráfica.
    - Esto, combinado con un agrupamiento, le permitirá obtener el resultado deseado.

    Atentamente
    --
    La ciencia solo encuentra lo que existe desde siempre.
    REEVES Hubert.
    0
    1. burgerdash Mensajes publicados 47 Estado Miembro 4
       
      [Lo siento por el mensaje de arriba, manejo fallido... :x]

      Blux, ¿cómo "miro la función datepart"?

      moiced59, de hecho quiero tener la suma de todas las personas que vinieron un lunes desde la apertura de mi base de datos, lo mismo para el martes, el miércoles...

      Jean-Jacques, voy a intentar eso de inmediato :) Gracias por su ayuda.
      0
  4. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
     
    La función datepart está accesible en la ayuda...

    --

    A+ Blux           
     "Los idiotas se atreven a todo. Es incluso por eso que los reconocemos"
    0
  5. burgerdash Mensajes publicados 47 Estado Miembro 4
     
    Blux, he creado una consulta que contiene el campo "Fecha" con la operación Agrupamiento y el criterio "DatePart(sem, fecha, vbMonday)", y un campo "Número de facturas creadas" con la operación Contar. Por un lado, creo que debo poner algo en lugar de "fecha", pero no entiendo qué, y por otro lado Access me presenta el siguiente mensaje de error que me impide guardar la consulta: "La expresión introducida contiene una función cuyo número de argumentos no es correcto."

    Jean_Jacques, ¿debo 1. crear una nueva consulta en modo diseño
    2. escribir esta fórmula en el cuadro de arriba a la izquierda
    3. reemplazar <campo_fecha> con el nombre del campo que contiene las fechas de creación de facturas
    4. elegir la operación "Agrupamiento"?
    ¿Porque si hago eso, Access me responde que cometo un error de sintaxis...?
    0
    1. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
       
      Hay que reemplazar los parámetros de datepart por los que desees, es decir, la fecha sobre la que quieres que se aplique y el tipo de datos que quieres extraer (día, mes, semana...).

      --

      A+ Blux
       "Los tontos se atreven a todo. Es incluso por eso que los reconocemos"
      0
    2. Jean_Jacques Mensajes publicados 1045 Fecha de registro   Estado Miembro Última intervención   112
       
      burgerdash,

      De hecho, hay que reemplazar <Champ_date> por el nombre del campo que contiene la información 'fecha'.
      Pensé que esta convención era conocida ... Lo siento.

      Nota: ¡Hay que copiar la línea completa a continuación! Y esto, sea cual sea el modo, creación o modificación...
      Día literal: Formato([<Champ_date>];"\ dddd")

      ¡A+!
      --
      La ciencia solo encuentra lo que ha existido desde siempre.
      REEVES Hubert.
      0
  6. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    Lo mejor sería que crees un nuevo campo con el nombre del día, por ejemplo: día y luego haz:

    select count(cliente)
    from ...
    group by día
    0
    1. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
       
      No se recomienda en una base de datos relacional...

      --

      A+ Blux        
       "Los tontos se atreven a todo. Es incluso por eso que los reconocemos"
      0
  7. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    baah incluso con relaciones no será un problema, lo encuentro simple de aplicar y siempre será útil.
    0
    1. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
       
      Si tienes una base con 2 millones de líneas, ¡vas a añadir 2 millones de días!
      ¡Qué desperdicio, cuando se puede recalcular cuando se necesita...

      --

      A+ Blux           
       "Los tontos se atreven a todo. Es incluso así como los reconocemos"
      0
  8. burgerdash Mensajes publicados 47 Estado Miembro 4
     
    Blux, lo siento, pero no entiendo tus explicaciones. Aparentemente, en mi caso, en "DatePart(intervalo, fecha [, primer_día_sem] [, primera_semana_año] )" debo reemplazar "intervalo" por "sem" para solicitar un día de la semana, y "primer_día_sem" por "vbMonday" porque quiero que el lunes sea el primer día de la semana. La primera semana del año me da igual, y este criterio es opcional. Luego, aquí está lo que me dice la ayuda respecto a "fecha":
    "Argumento fecha obligatorio. Variant (Date) a evaluar."
    ¿Les parece claro a ustedes? Sospecho que Microsoft ha escrito su documentación de una manera que solo aquellos que ya saben cómo usar el programa entienden ^^
    Concretamente, debo reemplazar "fecha" por "Nomdelatable_Nomduchamp" a tratar?

    Ced, es lo que intenté al principio, pero eso obligaba a copiar el nombre del día cuando ya se muestra en el campo vecino! Es tonto, estoy seguro de que Access puede hacer eso solo!
    0
  9. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    No veo para qué te va a servir el datepart.
    0
    1. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
       
      Yo tampoco, me he enredado desde el principio... :-)

      Es el formato correcto que hay que usar, como decía Jean-Jacques, con una matización: como estamos en SQL, hay que usar la versión en inglés:

      SELECT format(campo_fecha,"dddd") FROM ...

      para la fecha de hoy, devuelve sábado.

      Disculpen por haberlos embadurnado con un error :-(

      --

      A+ Blux
       "Los tontos se atreven a todo. Es incluso por eso que los reconocemos"
      0
      1. Jean_Jacques Mensajes publicados 1045 Fecha de registro   Estado Miembro Última intervención   112 > blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención  
         
        Para información,

        Aquí está el copia/pega (adaptado) de mi prueba SQL.
        Funciona correctamente en mi versión Access 2000.

        SELECT Month([<campo_fecha>]) AS N°, Format([<campo_fecha>],"\ dddd") AS [Día literal]
        FROM <tabla> GROUP BY Month([<campo_fecha>]), Format([<campo_fecha>],"\ dddd");

        ¡Hasta luego!
        --
        La ciencia solo encuentra lo que existe desde siempre.
        REEVES Hubert.
        0
  10. burgerdash Mensajes publicados 47 Estado Miembro 4
     
    Ced, bueno, es según los consejos de blux que estoy tratando de usarlo... El objetivo es obtener en una consulta datos clasificados por período de la semana sin tener que modificar los datos de la tabla (porque necesito la fecha completa para otras consultas, y quiero evitar la redundancia de información como

    Fecha | Día
    sábado 7 de enero de 2010 | Sábado

    (lo cual es molesto para la persona que tiene que ingresar la información día a día y ocupa espacio en el servidor)).
    0
  11. burgerdash Mensajes publicados 47 Estado Miembro 4
     
    Ah, de acuerdo XD Gracias Ced por insistir, y gracias blux por perseverar.

    Bueno, entonces voy a generar una columna Fecha | Factura | Agrupación | SELECT format(Fecha,"dddd") FROM ... en mi consulta?
    Reacción de Access: "Esta expresión contiene una subconsulta errónea. Coloque la subconsulta entre paréntesis."
    ¿Se supone que debo reemplazar los dddd o ... por algo?
    0
    1. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
       
      No, simplemente pones format(fecha_que_tú_quieras,"dddd") como columna.

      Lo que di era un simple ejemplo...

      --

      A+ Blux           
      "Los tontos se atreven a todo. Es incluso por eso que los reconocemos"
      0
  12. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    re

    no entiendo nada con el formato del campo, vas a obtener el día ¿ok? pero eso ya lo tiene, aparentemente.
    0
    1. blux Mensajes publicados 5035 Fecha de registro   Estado Moderador Última intervención   3 455
       
      Según lo que he entendido, solo tiene una fecha completa, así que tantos pivotes para un group by...

      --

      A+ Blux           
       "Los tontos, se atreven a todo. Es incluso por eso que los reconocemos"
      0
  13. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    ah ok, pensé que la fecha era en formato sábado 9 de enero de 2010.
    0
  14. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    Sin embargo, lo he probado y el SQL de Access no soporta el formato.
    0
  15. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    re

    G nada, disculpa, tenía una referencia faltante, por eso no funcionaba, ¡lo siento!
    0
  16. burgerdash Mensajes publicados 47 Estado Miembro 4
     
    https://www.imagup.com

    a la izquierda, mis datos de prueba en la tabla Factura (hay otros campos pero los he ocultado para ir al grano); a la derecha, lo que me gustaría obtener en una consulta, para luego quizás, en un mundo perfecto, sacar un bonito gráfico.
    El campo rodeado en naranja es el que estoy editando. Así es como introduzco los datos, así es como se muestran. ¿De acuerdo?

    El archivo fue creado en 2003, pero ahora estoy en 2007 para el fin de semana.
    0
  17. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    ```sql SELECT Count(lundi.nom) AS total, Format(date, 'dddd') AS Expr1
    FROM lundi
    GROUP BY Format(date, 'dddd')
    ORDER BY MIN(date); ```
    0
  18. burgerdash Mensajes publicados 47 Estado Miembro 4
     
    Ced, no sé usar SQL. ¿Qué escribo dónde, en la herramienta gráfica de creación de consultas?

    Gracias por los esfuerzos que están haciendo para ayudarme, espero poder devolverles pronto el favor.
    0
  19. moiced59 Mensajes publicados 1161 Estado Miembro 60
     
    entonces tu campo de fecha ya estaba bien en el formato sábado 9 de enero de 2009
    0
  20. burgerdash Mensajes publicados 47 Estado Miembro 4
     
    Sí, pero en el estado actual no sé cómo utilizar en una consulta este "sábado" que se muestra. Esa es toda la dificultad del problema, si me permiten.
    0
  • 1
  • 2