PostgreSQL Generate_Series para crear una serie de fechas

PostgreSQL Generate_Series para crear una serie de fechas

Debe estar familiarizado con la entrada de datos en cualquier sistema de gestión de bases de datos. Al ingresar datos, es posible que no tenga tiempo y debe ignorar las brechas en sus datos o desea una serie de registros consistentes. En esta situación, PostgreSQL Generate_Series es aplicable para lograr el objetivo requerido. Como el nombre indica, el mecanismo de esta función contiene 2 o 3 entradas. i.mi., Generate_Series le permite generar una secuencia de registros con un punto de partida, punto de terminación e incremento de valor (opcional). Principalmente funciona en dos tipos de datos. i.mi., Enteros y marcas de tiempo. Para crear una secuencia de fechas, la función Generate_Series se utiliza de diferentes maneras.

Sintaxis:

>> generar_series ([inicio], [parar], [opcional paso/intervalo]);

La descripción de la sintaxis de consulta es la siguiente:

  • [comenzar]: Es el punto de partida de generar una serie.
  • [detener]: Esto muestra el punto donde la serie se detendrá.
  • [intervalo]: El tercer pero opcional valor implica cuánto se incrementará la serie en cada paso. El valor predeterminado para intervalos es 1.

Tengamos una idea de cómo puede realizar la función Generate_Series (). A continuación se presentan algunos ejemplos elementales. Para comprender el concepto de esta función, necesitamos instalar y abrir el shell de línea de comandos PostgreSQL (PSQL).

Después de una configuración exitosa y al proporcionar localhost, nombre de la base de datos, número de puerto y contraseña, podemos pasar por cualquier consulta en PSQL.

Ejemplo 01: generar_series usando el operador de Integer de fecha más

La siguiente consulta contiene una función incorporada de "fecha" para obtener la fecha actual. Mientras que "A" es el operador proporcionado. La función de este operador es agregar ese número particular (intervalo) en la parte del día de la fecha. O en otras palabras, con intervalos específicos, los días se cambian y se muestran en la fecha. En la salida, el intervalo "9" se agregará cada día, yo.mi., 9+9 = 18, luego 27, y así sucesivamente, hasta que se alcanza la suma de 40.

>> seleccione Current_Date + S.A como fechas de Generate_Series (0,40,9) como S (a);

Ejemplo 02: Uso de la fecha actual para generar series de fecha

Para generar series de fechas con la ayuda de la fecha actual, estamos utilizando la función ahora (), que toma la fecha actual automáticamente del sistema. Puede ver que la salida correspondiente muestra la fecha de hasta 4 días. Esto se debe a que hemos limitado la ejecución agregando 4 días a la fecha actual. Como hemos proporcionado el tiempo de intervalo a 1 día, cada fecha se incrementará con 1 adición en el día

>> seleccionar * de generar_series (ahora (), ahora () + '4 días', '1 día');

Ejemplo 03: Generación de series de fechas usando marcas de tiempo

Marcas de tiempo de horas: Esta función también usa el tipo de datos de marcas de tiempo. La marca de tiempo es básicamente una secuencia de caracteres que proporcionan el tiempo y la fecha de un día relacionado. La función correspondiente facilita al usuario para proporcionar fechas entre ambas fechas que usamos para anticipar en la consulta. Se obtiene la lista de marcas de tiempo de la fecha 7 a 11 con una marca de tiempo cada 5 horas.

>> seleccionar * de Generate_Series ('2021-3-7 00:00' :: Timestamp, '2021-3-11 12:00', '5 horas');

La consulta, como se mencionó anteriormente, también se usa para agregar minutos y segundos con horas para adquirir una mejor marca de tiempo entre los días de marca de tiempo relevante.

Marcas de tiempo de días: En el ejemplo superior, hemos visto que la marca de tiempo se usa para mostrar fechas entre las dos fechas respectivas que hemos proporcionado la alteración en las horas incrementadas en 5. En el ejemplo actual, veremos la marca de tiempo en días. Los días se incrementan con 2, ya que hemos iniciado una brecha de 2 días en la salida particular.

>> seleccionar * de generar_series ('2021-03-01' :: timestampptz, '2021-03-19' :: timestampptz, '2 días');

Ejemplo 04: Generación de fechas específicas del mes usando date_trunc

Primer día del mes

Si queremos generar la primera fecha del mes actual, utilizaremos la consulta adjunta a continuación.La función distinta utilizada aquí es date_trunc, que trunca la fecha a la precisión dada.i.mi. ahora()

>> seleccione date_trunc ('mes', ahora ());

Último día del mes

El mismo enfoque date_trunc generará el último día del mes.

>> seleccione date_trunc ('mes', ahora ()) + '1 mes' :: intervalo - '1 día' :: interval como end_of_month;

A mediados del mes

A mediados del mes se obtiene alterando en la consulta anterior. Utilizaremos la función media para obtener el objetivo respectivo. O restamos 17 días del último.

>> seleccione date_trunc ('mes', ahora ()) + '1 mes' :: intervalo - '17 días ':: interval como mid_of_month;

Ejemplo 05: Generación de fechas utilizando datos relacionados con el calendario

Aquí viene el ejemplo de usar datos de calendario. Llegaremos a conocer el año bisiesto, yo.mi., Días totales en febrero."T" denota el verdadero año es un año bisiesto, y para "F", es falso "Dow" representa los días de la semana. La columna "Feb" contiene días totales en el mes. "Día" denota el primer día de Jan de cada año. Según la investigación, las semanas de ISO comienzan a partir del lunes, y la primera semana de un año contiene el 5 de enero del año.

>> Seleccione Fecha :: Fecha, Extract ('ISODOW' desde la fecha) como Dow, To_Char (fecha, 'dy') como día, extracto ('año iso' desde la fecha) como "año iso", extracto ('semana' a partir de la fecha) como semana, extracto ('día' (fecha + intervalo '2 mes - 1 día')) como feb, extracto ('año' desde la fecha) como año, extracto ('día' desde (fecha + intervalo ' 2 mes-1 día ')) = 29As Leap de Generate_Series (fecha' 2010-01-01 ', fecha' 2020-03-01 ', intervalo' 1 año ') como t (fecha);

Isodow es el día estándar de "ISO" de la semana. La consulta se ejecutará de 2010 a 2020 mientras se manipulará cada mes, semana y día del año.

Ejemplo 06: Generación de una serie de fechas específicas y días de día en la semana

En esta consulta, adquiriremos fechas y números de día filtrando días en una semana. Consideraremos numéricamente días de la semana. Por ejemplo, comenzando de 0 a 6. Donde 0 es domingo y 6 es el sábado. En esta consulta, verá que hemos aplicado una condición para traer fechas y números de día que no están en 2 y 5. Por ejemplo, el 20 de febrero, era sábado, por lo que el número que apareció es 6.

>> con días como (seleccionar DD, extraer (Dow de DD) DW de Generate_Series ('2021-02-20' :: fecha, '2021-03-05' :: fecha, '1 día' :: intervalo) DD ) seleccione *de los días donde DW no en (2,5);

Conclusión

El artículo, como se mencionó anteriormente, cubre la mayoría de las funcionalidades básicas relacionadas con la generación de series para crear series de fechas. Los ejemplos detallados discutidos en todos los aspectos son tan significativos que aumentarán el conocimiento de su respectivo artículo.