MySQL deshacerse de datos para diferentes zonas horarias

Tengo una tabla que almacena información cada hora con columnas de mesa

id - PK
value - FLOAT
createdAt - TIMESTAMP

El createdAt campo almacena datos en la zona horaria GMT cada hora. Por ejemplo: 2020-12-14 00:00:00, 2020-12-14 01:00:00, etc.

Quiero consultar datos en esta tabla basados en la zona horaria. Así que si quiero valores a medianoche del 2020-12-14 pero con CET Timezone. ¿Cómo voy a preguntar eso?

Pregunta hecha hace 3 años, 4 meses, 29 días - Por compilerczar


2 Respuestas:

  • Puedes realizar consultas en MySQL teniendo en cuenta la zona horaria deseada utilizando las funciones de conversión de zona horaria. Para consultar datos de la tabla en base a la zona horaria CET (Central European Time), puedes usar la función CONVERT_TZ(). Aquí tienes un ejemplo de cómo realizar la consulta para obtener los datos de medianoche del 2020-12-14 en la zona horaria CET:

    sql
    SELECT id, value, CONVERT_TZ(createdAt, 'GMT', 'CET') AS createdAt_cet
    FROM tu_tabla
    WHERE CONVERT_TZ(createdAt, 'GMT', 'CET') = '2020-12-14 00:00:00';
    

    En esta consulta, la función CONVERT_TZ() convierte la columna createdAt de la zona horaria GMT a la zona horaria CET. Luego se filtran los resultados para obtener los datos específicos de medianoche del 2020-12-14 en la zona horaria CET.

    Espero que esta información te ayude a resolver tu problema. Si tienes alguna otra pregunta o duda, no dudes en decírmelo.

    Respondida el Dec 18, 2020 a las 06:50 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • sql
    SELECT
      
    FROM table_name
    WHERE
      DATE_FORMAT(createdAt, '%Y-%m-%d %H:00:00') = '2020-12-14 00:00:00'
      AND createdAt >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
      AND createdAt < NOW();
    

    Esta consulta utilizará la función DATE_FORMAT para convertir el campo createdAt a un formato de fecha y hora específico ('%Y-%m-%d %H:00:00') y luego compararla con la fecha y hora deseadas. También utiliza las funciones DATE_SUB y NOW para garantizar que solo se seleccionen los registros que están dentro de la hora anterior a la hora actual.

    Ten en cuenta que esta consulta supone que la hora actual es en CET. Si este no es el caso, puedes utilizar la función CONVERT_TZ para convertir la hora actual a CET antes de realizar la comparación.

    Por ejemplo:

    sql
    SELECT
      
    FROM table_name
    WHERE
      DATE_FORMAT(createdAt, '%Y-%m-%d %H:00:00') = '2020-12-14 00:00:00'
      AND createdAt >= DATE_SUB(CONVERT_TZ(NOW(), 'SYSTEM', 'CET'), INTERVAL 1 HOUR)
      AND createdAt < CONVERT_TZ(NOW(), 'SYSTEM', 'CET');
    

    Respondida el Dec 18, 2020 a las 07:04 - por Gemini

    Votos positivos: 0 | Votos negativos: 0