Referencia de funciones de PostgreSQL
Lo esencial de cada función: qué hace, cómo se llama, ejemplos que puedes modificar y ejecutar aquí mismo, y en qué fijarte para no tropezar.
Estas son las funciones principales, suficientes para la mayoría de las consultas. Todas las demás están en la documentación oficial de PostgreSQL(se abre en una pestaña nueva).
Condicionales
Devuelve el primer valor de la lista que no es NULL.
COALESCE(<valor1>, <valor2>, …)NULLIFDevuelve NULL si dos valores son iguales y, si no, el primer valor.
NULLIF(<valor>, <comparar con>)GREATESTDevuelve el mayor de una lista de valores.
GREATEST(<valor1>, <valor2>, …)LEASTDevuelve el menor de una lista de valores.
LEAST(<valor1>, <valor2>, …)CASEDevuelve valores distintos según las condiciones: el «si… entonces… si no» de SQL.
CASE WHEN <condición> THEN <resultado> … ELSE <si no> ENDNúmeros
Redondea un número a un entero o al número de decimales que necesites.
ROUND(<número>)CEILRedondea un número hacia arriba: al entero más cercano que no sea menor.
CEIL(<número>)FLOORRedondea un número hacia abajo: al entero más cercano que no sea mayor.
FLOOR(<número>)TRUNCQuita la parte decimal de un número sin redondear.
TRUNC(<número>)ABSDevuelve el valor absoluto de un número: su valor sin signo.
ABS(<número>)MODDevuelve el resto de dividir un número entre otro.
MOD(<dividendo>, <divisor>)POWEREleva un número a una potencia.
POWER(<número>, <exponente>)SQRTCalcula la raíz cuadrada de un número.
SQRT(<número>)WIDTH_BUCKETIndica en cuál de varios rangos iguales cae un número: 1, 2, 3…
WIDTH_BUCKET(<valor>, <desde>, <hasta>, <número de cubetas>)RANDOMDevuelve un número decimal aleatorio de 0 (incluido) a 1 (excluido).
RANDOM()Cadenas
Cuenta cuántos caracteres tiene una cadena.
LENGTH(<texto>)LOWERPasa un texto a minúsculas.
LOWER(<texto>)UPPERPasa un texto a mayúsculas.
UPPER(<texto>)INITCAPPone en mayúscula la primera letra de cada palabra y el resto en minúscula.
INITCAP(<texto>)TRIMQuita los espacios (u otros caracteres) del principio y del final de una cadena.
TRIM(<texto>)SUBSTRINGExtrae una parte de una cadena: desde la posición y con la longitud que necesites.
SUBSTRING(<texto> FROM <inicio>)LEFTToma el número indicado de caracteres del principio de una cadena.
LEFT(<texto>, <cantidad>)RIGHTToma el número indicado de caracteres del final de una cadena.
RIGHT(<texto>, <cantidad>)POSITIONEncuentra en qué carácter empieza una subcadena dentro de una cadena.
POSITION(<subcadena> IN <texto>)STARTS_WITHComprueba si una cadena empieza por el prefijo indicado.
STARTS_WITH(<texto>, <prefijo>)REPLACESustituye en una cadena todas las apariciones de un texto por otro.
REPLACE(<texto>, <buscar>, <reemplazo>)TRANSLATESustituye caracteres sueltos por otros, cada uno por el suyo, en una sola pasada.
TRANSLATE(<texto>, <caracteres>, <reemplazos>)REGEXP_LIKEComprueba si una cadena encaja con una expresión regular.
REGEXP_LIKE(<texto>, '<patrón>')REGEXP_MATCHESExtrae de una cadena las partes que encajan con una expresión regular.
REGEXP_MATCHES(<texto>, '<patrón>')REGEXP_SUBSTRDevuelve el primer fragmento de una cadena que encaja con una expresión regular, como texto normal.
REGEXP_SUBSTR(<texto>, '<patrón>')REGEXP_REPLACESustituye las partes de una cadena que encajan con una expresión regular.
REGEXP_REPLACE(<texto>, '<patrón>', <reemplazo>)SPLIT_PARTDivide una cadena por un separador y devuelve la parte con el número que necesites.
SPLIT_PART(<texto>, <separador>, <número de parte>)CONCATUne varios valores en una sola cadena, saltándose los NULL.
CONCAT(<valor1>, <valor2>, …)FORMATConstruye una cadena a partir de una plantilla, poniendo valores en lugar de %s.
FORMAT('<plantilla>', <valor1>, <valor2>, …)LPADRellena una cadena por la izquierda hasta la longitud que necesites.
LPAD(<texto>, <longitud>)RPADRellena una cadena por la derecha hasta la longitud que necesites.
RPAD(<texto>, <longitud>)REPEATRepite una cadena el número de veces indicado.
REPEAT(<texto>, <veces>)REVERSEDa la vuelta a una cadena.
REVERSE(<texto>)MD5Calcula el hash MD5 de una cadena: 32 caracteres hexadecimales.
MD5(<texto>)Fechas y horas
Recorta una fecha y hora al inicio del año, mes, semana, día u hora.
DATE_TRUNC('<unidad>', <momento>)DATE_BINRedondea un momento hacia abajo al inicio de un intervalo de cualquier longitud: 15 minutos, 6 horas, 10 días.
DATE_BIN(INTERVAL '<paso>', <momento>, <origen>)EXTRACTSaca una parte concreta de una fecha u hora: el año, el mes, el día, la hora.
EXTRACT(<campo> FROM <fecha u hora>)DATE_PARTSaca una parte concreta de una fecha u hora: lo mismo que EXTRACT, pero como función normal.
DATE_PART('<campo>', <fecha u hora>)NOWDevuelve la fecha y la hora actuales: el momento en que empezó la transacción.
NOW()CURRENT_DATEDevuelve la fecha de hoy, sin la hora.
CURRENT_DATEAGECalcula cuánto tiempo ha pasado entre dos momentos, en años, meses y días.
AGE(<momento posterior>, <momento anterior>)MAKE_DATEConstruye una fecha a partir de números sueltos: el año, el mes y el día.
MAKE_DATE(<año>, <mes>, <día>)MAKE_INTERVALConstruye un intervalo a partir de números sueltos: años, meses, días, horas.
MAKE_INTERVAL(<unidad> => <cantidad>, …)TO_CHARConvierte una fecha, una hora o un número en texto con el formato que necesites.
TO_CHAR(<valor>, '<formato>')TO_DATEConvierte un texto en fecha según el formato indicado.
TO_DATE(<texto>, '<formato>')Tipos
Convierte un valor de un tipo a otro: texto a número, texto a fecha, número a texto.
CAST(<valor> AS <tipo>)TO_NUMBERConvierte en número un texto escrito «a lo humano»: con comas o con símbolo de moneda.
TO_NUMBER(<texto>, '<formato>')GEN_RANDOM_UUIDGenera un UUID aleatorio: un identificador único como 3f2c9a1e-….
GEN_RANDOM_UUID()Arrays y series
Divide una cadena por un separador en un array de partes.
STRING_TO_ARRAY(<texto>, <separador>)ARRAY_TO_STRINGUne los elementos de un array en una sola cadena con un separador.
ARRAY_TO_STRING(<array>, <separador>)UNNESTDespliega un array en filas: una fila por elemento.
UNNEST(<array>)CARDINALITYCuenta cuántos elementos tiene un array.
CARDINALITY(<array>)ARRAY_LENGTHDevuelve la longitud de un array en la dimensión indicada.
ARRAY_LENGTH(<array>, <dimensión>)ARRAY_POSITIONEncuentra el número del primer elemento del array con el valor indicado.
ARRAY_POSITION(<array>, <valor>)ARRAY_APPENDDevuelve un array con un elemento añadido al final.
ARRAY_APPEND(<array>, <elemento>)ARRAY_REMOVEDevuelve un array sin ninguno de los elementos con el valor indicado.
ARRAY_REMOVE(<array>, <valor>)GENERATE_SERIESCrea filas con una secuencia de números o de momentos.
GENERATE_SERIES(<inicio>, <fin>)JSON
Convierte un valor —un número, un texto, un array o una fila entera de la tabla— en JSON.
TO_JSONB(<valor>)JSONB_BUILD_OBJECTConstruye un objeto JSON a partir de pares clave–valor.
JSONB_BUILD_OBJECT(<clave1>, <valor1>, <clave2>, <valor2>, …)JSONB_AGGReúne valores de muchas filas en un solo array JSON.
JSONB_AGG(<expresión>)JSONB_SETDevuelve una copia del JSON con un valor nuevo en la ruta indicada.
JSONB_SET(<json>, '{<ruta>}', <nuevo valor>)JSONB_EACHDespliega un objeto JSON en filas: una fila por cada par clave–valor.
JSONB_EACH(<objeto json>)JSONB_OBJECT_KEYSDevuelve las claves de un objeto JSON: una fila por clave.
JSONB_OBJECT_KEYS(<objeto json>)JSONB_ARRAY_ELEMENTSDespliega un array JSON en filas: una fila por elemento.
JSONB_ARRAY_ELEMENTS(<array json>)JSONB_PATH_QUERYSaca valores de un JSON con una expresión SQL/JSON path, también con condiciones.
JSONB_PATH_QUERY(<json>, '<ruta>')Búsqueda de texto completo
Prepara un texto para la búsqueda de texto completo: lo divide en palabras y las reduce a su raíz.
TO_TSVECTOR('<configuración de idioma>', <texto>)TO_TSQUERYConstruye una consulta de búsqueda de texto completo: palabras con condiciones «y», «o» y «no».
TO_TSQUERY('<configuración de idioma>', '<consulta>')De agregación
Cuenta filas o valores que no son NULL.
COUNT(*)SUMSuma los valores de muchas filas y devuelve el total.
SUM(<expresión>)AVGCalcula la media aritmética de los valores de muchas filas.
AVG(<expresión>)MINDevuelve el valor más pequeño entre las filas.
MIN(<expresión>)MAXDevuelve el valor más grande entre las filas.
MAX(<expresión>)PERCENTILE_CONTEncuentra la mediana u otro percentil: el valor por debajo del cual queda una proporción dada de los datos.
PERCENTILE_CONT(<fracción>) WITHIN GROUP (ORDER BY <expresión>)PERCENTILE_DISCEncuentra un percentil entre los valores existentes: una mediana que está seguro en los datos.
PERCENTILE_DISC(<fracción>) WITHIN GROUP (ORDER BY <expresión>)BOOL_ANDDevuelve true si una condición se cumple en todas las filas.
BOOL_AND(<condición>)BOOL_ORDevuelve true si una condición se cumple al menos en una fila.
BOOL_OR(<condición>)STRING_AGGUne valores de muchas filas en un solo texto con un separador.
STRING_AGG(<expresión>, <separador>)ARRAY_AGGReúne valores de muchas filas en un solo array.
ARRAY_AGG(<expresión>)GROUPINGIndica si una fila es un subtotal de ROLLUP o CUBE para una columna: 1 — subtotal, 0 — grupo normal.
GROUPING(<columna>)De ventana
Numera las filas 1, 2, 3… en un orden dado: en todo el resultado o dentro de cada grupo.
ROW_NUMBER() OVER (ORDER BY <criterio de orden>)RANKAsigna puestos teniendo en cuenta los empates: los valores iguales comparten puesto y el siguiente se salta.
RANK() OVER (ORDER BY <criterio de orden>)DENSE_RANKAsigna puestos teniendo en cuenta los empates, pero sin huecos: 1, 2, 2, 3.
DENSE_RANK() OVER (ORDER BY <criterio de orden>)PERCENT_RANKMuestra la posición relativa de una fila de 0 a 1: qué proporción de las demás filas queda por delante.
PERCENT_RANK() OVER (ORDER BY <criterio de orden>)CUME_DISTMuestra la proporción de filas que quedan por delante de la actual o empatan con ella, de 0 a 1.
CUME_DIST() OVER (ORDER BY <criterio de orden>)NTILEDivide las filas en el número de grupos indicado, de tamaño parecido, y numera los grupos.
NTILE(<número de grupos>) OVER (ORDER BY <criterio de orden>)LAGToma un valor de la fila anterior para compararlo con el de la actual.
LAG(<expresión>) OVER (ORDER BY <criterio de orden>)LEADToma un valor de la fila siguiente para compararlo con el de la actual.
LEAD(<expresión>) OVER (ORDER BY <criterio de orden>)FIRST_VALUEToma el valor de la primera fila de la ventana.
FIRST_VALUE(<expresión>) OVER (ORDER BY <criterio de orden>)LAST_VALUEToma el valor de la última fila de la ventana, pero solo con el marco correcto.
LAST_VALUE(<expresión>) OVER (
ORDER BY <criterio de orden>
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)NTH_VALUEToma el valor de la fila N de la ventana: la segunda, la tercera…
NTH_VALUE(<expresión>, <n>) OVER (
ORDER BY <criterio de orden>
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)