Funciones Regulares

Aplica A: WatchGuard Advanced EPDR

Las funciones regulares funcionan por separado en cada fila de una consulta SQL. Con las funciones regulares, el resultado de la función en una fila no depende de las demás filas.

En la herramienta Consulta SQL Avanzada, las funciones regulares tienen estas características:

  • Tipado Fuerte — A diferencia del SQL estándar, WatchGuard Endpoint Security no realiza conversiones implícitas entre tipos. Cada función opera para un conjunto específico de tipos. Esto significa que, en ocasiones, debe utilizar funciones de conversión de tipos.
  • Eliminación de Subexpresiones Comunes — Todas las expresiones de una consulta que tienen el mismo AST (el mismo registro o el mismo resultado del análisis sintáctico) se consideran que tienen valores idénticos. Estas expresiones se concatenan y se ejecutan una vez. Las subconsultas idénticas también se eliminan de esta manera.
  • Tipos de Resultados — Todas las funciones devuelven un único valor como resultado (no varios valores ni valores cero). El tipo de resultado suele definirse solo por los tipos de argumentos, no por los valores.
  • Constantes — Para simplificar, algunas funciones solo pueden trabajar con constantes para algunos argumentos. Por ejemplo, el argumento derecho del operador LIKE debe ser una constante. Casi todas las funciones devuelven una constante para argumentos constantes. La excepción son las funciones que generan números aleatorios. La función now devuelve valores diferentes para consultas que se ejecutaron en momentos diferentes. El resultado se considera una constante, porque la constancia solo es importante dentro de una sola consulta. Una expresión constante también se considera una constante (por ejemplo, la mitad derecha del operador LIKE se puede construir a partir de varias constantes).
  • Procesamiento NULL — Si al menos uno de los argumentos de la función es NULL, el resultado de la función también es NULL, excepto en las funciones en las que se especifica lo contrario.
  • Constancia — Las funciones no pueden cambiar los valores de sus argumentos. Cualquier cambio se devuelve como resultado. Por lo tanto, el resultado del cálculo de funciones separadas no depende del orden en que se escriben las funciones en la consulta.
  • Gestión de Errores — Algunas funciones pueden generar una excepción si los datos no son válidos. En este caso, la consulta se cancela y devuelve un mensaje de error al cliente.
  • Evaluación de Argumentos — En casi todos los lenguajes de programación, algunos argumentos pueden no evaluarse con algunos operadores, como &&, || y ?:. En la herramienta Consulta SQL Avanzada, los argumentos de las funciones (operadores) siempre se evalúan. Esto se debe a que se evalúan partes completas de las columnas al mismo tiempo, en lugar de calcular cada fila por separado.

Estas son las funciones más importantes:

Funciones Aritméticas

Para todas las funciones aritméticas, el tipo de resultado se calcula como el tipo numérico más pequeño en el que cabe el resultado, si existe dicho tipo. El mínimo se toma simultáneamente en función del número de bits, si es con signo y si es un número con punto flotante. Si no hay suficientes bits, se toma el tipo de bit más alto.

Las funciones aritméticas operan para cualquier par de tipos de UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 o Float64.

Función Descripción

plus(a, b)

Operador a + b

Calcula la suma de dos números. También puede agregar números enteros con una fecha (Date) o una fecha y hora (DateTime). En el caso de una fecha, cuando agrega un número entero, corresponde al número de días agregados. Para una fecha con hora, cuando agrega un número entero, corresponde al número de segundos agregados.

minus(a, b)

Operador a - b

Calcula la diferencia entre dos números. El resultado siempre tiene signo. También puede calcular números enteros a partir de una fecha (Date) o una fecha con hora (DateTime).

divide (a, b)

Operador a / b

Calcula el cociente de los números. El tipo de resultado es siempre un tipo de punto flotante. No es una división entera. Para la división entera, utilice la función intDiv. Cuando se divide en cero, se obtiene inf, -inf o nan.

intDiv (a, b)

Calcula el cociente de los números. Divide en números enteros y redondea hacia abajo (por el valor absoluto). Se lanza una excepción cuando se divide por cero o cuando se divide un número negativo mínimo por menos uno.

intDivOrZero (a, b)

Difiere de intDiv porque devuelve cero cuando se divide en cero o cuando se divide un número negativo mínimo en menos uno.

module (a, b)

Operador a % b

Calcula el resto después de la división. Si los argumentos son números con punto flotante, se convierten previamente a enteros. El resto se toma en el mismo sentido que en C++. Se utiliza la división truncada para los números negativos. Se lanza una excepción cuando se divide en cero o cuando se divide un número negativo mínimo en menos uno.

negate(a)

Operador -a

Calcula un número con el signo inverso. El resultado siempre tiene signo.

abs (a)

Calcula el valor absoluto del número (a). Es decir, si a < 0, devuelve -a. Para tipos sin signo, no hace nada. Para tipos enteros con signo, devuelve un número sin signo.

gcd (a, b)

Devuelve el máximo común divisor de los números. Se genera una excepción cuando se divide en cero o cuando un número negativo mínimo se divide en menos uno.

lcm(a, b)

Devuelve el múltiplo común mínimo de los números. Se genera una excepción cuando se divide en cero o cuando un número negativo mínimo se divide en menos uno.

Funciones de Comparación

Las funciones de comparación siempre devuelven 0 o 1 (Uint8). Se pueden comparar estos tipos:

  • Números
  • Cadenas de caracteres (String) y cadenas de caracteres de longitud fija (FixedString(N))
  • Fechas (Date)
  • Fechas con horas (DateTime)

Por ejemplo, no se puede comparar una fecha con una cadena. Debe utilizar una función para convertir la cadena en una fecha, o viceversa.

Las cadenas se comparan por bytes. Una cadena más corta es menor que todas las cadenas que comienzan por ella y que contienen al menos un carácter más.

Los operadores de comparación son:

  • Equalsa = b y a == b
  • NotEqualsa != b y a <> b
  • Lessa < b
  • Greatera > b
  • LessOrEqualsa <= b
  • GreaterOrEqualsa >= b

Funciones Lógicas

Las funciones lógicas aceptan cualquier tipo numérico, pero devuelven un número UInt8 igual a 0 o 1.

El cero como argumento se considera "falso", mientras que cualquier valor distinto de cero se considera "verdadero".

  • ANDAND

  • OROR

  • NotNOT

  • XorXOR

Funciones de Conversión de Tipos

Las conversiones básicas admitidas son:

  • Conversión a tipos de datos sin signo — toUInt8, toUInt16, toUInt32, toUInt64

  • Conversión a tipos de datos con signo — toInt8, toInt16, toInt32, toInt64, toFloat32, toFloat64, toDate, toDateTime

  • Conversión a cero si hay error — toUInt8OrZero, toUInt16OrZero, toUInt32OrZero, toUInt64OrZero, toInt8OrZero, toInt16OrZero, toInt32OrZero, toInt64OrZero, toFloat32OrZero, toFloat64OrZero, toDateOrZero, toDateTimeOrZero

  • Conversión a nulo si hay error — toUInt8OrNull, toUInt16OrNull, toUInt32OrNull, toUInt64OrNull, toInt8OrNull, toInt16OrNull, toInt32OrNull, toInt64OrNull, toFloat32OrNull, toFloat64OrNull, toDateOrNull, toDateTimeOrNull

Estas son conversiones de tipos de datos más complejas:

Función Descripción

toDecimal32(value, S), toDecimal64(value, S), toDecimal128(value, S)

Esta función convierte value a decimal con una precisión de S. El value puede ser un número o una cadena. El parámetro S especifica el número de decimales.

toString

Esta función convierte números, cadenas (pero no cadenas fijas), fechas (Dates) y fechas con horas (DateTime). Todas estas funciones aceptan un argumento.

Cuando la función convierte a o desde una cadena, el valor se formatea o analiza con las mismas reglas que para el formato separado por tabulaciones (TSV). Si la cadena no se puede analizar, se lanza una excepción y se cancela la solicitud.

Cuando la función convierte fechas a números o viceversa, la fecha corresponde al número de días transcurridos desde el inicio del tiempo Unix (1/1/1970).

Estos son los formatos de fecha y fecha con hora para las funciones toDate/toDateTime:

AAAA-MM-DD

AAAA-MM-DD hh: mm: ss

Como excepción, cuando la función convierte tipos numéricos UInt32, Int32, UInt64 o Int64 a Date, y el número es mayor o igual a 65536, entonces el número se interpreta como una marca de tiempo Unix (y no como el número de días). Esto admite la escritura toDate (unix_timestamp), que de otro modo provocaría un error y requeriría escribir toDate (toDateTime (unix_timestamp)).

La conversión entre una fecha (Date) y una fecha con hora (DateTime) se realiza de forma natural (es decir, se agrega una hora nula o se elimina la hora).

La conversión entre tipos numéricos utiliza las mismas reglas que las asignaciones entre diferentes tipos numéricos en C++.

Además, la función toString del argumento DateTime puede tomar un segundo argumento String que contenga el nombre de la zona horaria.

toFixedString(s, N)

Esta función convierte un argumento de tipo String a un tipo FixedString(N) (una cadena con longitud fija N). N debe ser una constante. Si la cadena tiene menos bytes que N, se pasa con bytes nulos a la derecha. Si la cadena tiene más bytes que N, se lanza una excepción.

toStringCutToZero(s)

Esta función acepta un argumento String o FixedString. Devuelve la cadena con el contenido truncado en el primer byte cero encontrado.

reinterpretAsUInt8, reinterpretAsUInt16, reinterpretAsUInt32, reinterpretAsUInt64

reinterpretAsInt8, reinterpretAsInt16, reinterpretAsInt32, reinterpretAsInt64

reinterpretAsFloat32, reinterpretAsFloat64

reinterpretAsDate, reinterpretAsDateTime

Estas funciones aceptan una cadena e interpretan los bytes situados al principio de la cadena como un número (little endian). Si la cadena no es lo suficientemente larga, las funciones operan como si la cadena estuviera rellenada con el número necesario de bytes nulos. Si la cadena es más larga de lo necesario, se ignoran los bytes adicionales. Una fecha (Date) se interpreta como el número de días transcurridos desde el inicio del tiempo Unix (1/1/1970), y una fecha con hora (DateTime) se interpreta como el número de segundos transcurridos desde el inicio del tiempo Unix.

reinterpretAsString

Esta función acepta un número o una fecha (Date) o una fecha con hora (DateTime) y devuelve una cadena que contiene bytes que representan el valor correspondiente en formato little endian. Los bytes nulos se omiten al final. Por ejemplo, un valor de tipo UInt32 de 255 es una cadena de un byte de longitud.

reinterpretAsFixedString

Esta función acepta un número, una fecha (Date) o una fecha con hora (DateTime) y devuelve una cadena fija (FixedString) que contiene bytes que representan el valor correspondiente en formato little endian. Los bytes nulos se omiten al final. Por ejemplo, un valor de tipo UInt32 de 255 es una FixedString que tiene un byte de longitud.

CAST(x, t)

Esta función convierte x al tipo de datos t.

toIntervalYear, toIntervalQuarter, toIntervalMonth, toIntervalWeek, toIntervalDay, toIntervalHour, toIntervalMinute, toIntervalSecond

Esta función convierte un argumento de tipo Number en un tipo Interval (duración). El tipo Interval es muy útil porque permite realizar operaciones aritméticas directamente con Date o DateTime.

parseDateTimeBestEffort

Esta función analiza un argumento de tipo Number y lo convierte en un tipo Date o DateTime. A diferencia de toDate y toDateTime, parseDateTimeBestEffort puede devolver un formato de fecha más complejo.

parseDateTimeBestEffortOrNull

Esta función analiza un argumento de tipo Number y lo convierte en un tipo Date o DateTime. A diferencia de toDate y toDateTime, parseDateTimeBestEffort puede devolver un formato de fecha más complejo. Además, devuelve null cuando encuentra un formato de fecha que no se puede procesar.

parseDateTimeBestEffortOrZero

Esta función analiza un argumento de tipo Number y lo convierte en un tipo Date o DateTime. A diferencia de toDate y toDateTime, parseDateTimeBestEffort puede devolver un formato de fecha más complejo. Además, devuelve la fecha cero o la fecha/hora cero cuando encuentra un formato de fecha que no se puede procesar.

Funciones para Trabajar con Fechas y Horas

Todas las funciones que trabajan con la fecha y la hora y tienen un uso lógico para la zona horaria pueden aceptar un segundo argumento opcional de zona horaria. Solo se admiten zonas horarias que difieran de UTC en un número entero de horas.

Función Descripción

toTimeZone

Convierte la hora (Date) o la fecha y la hora (DateTime) a la zona horaria especificada.

toYear

Convierte una fecha (Date) o una fecha con hora (DateTime) a un número UInt16 con el número del año.

toQuarter

Convierte una fecha (Date) o una fecha con hora (DateTime) a un número UInt8 con el número del trimestre.

toMonth

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número del mes (1-12).

toDayOfYear

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número del día del año (1-366).

toDayOfMonth

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número del día del mes (1-31).

toDayOfWeek

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número del día de la semana (lunes es 1 y domingo es 7).

toHour

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número de la hora en formato de 24 horas (0-23). Esta función asume que cuando los relojes se adelantan por el horario de verano, lo hacen una hora y esto ocurre a las 2 a. m. Si los relojes se atrasan, lo hacen una hora y esto ocurre a las 3 a. m.

toMinute

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número de minutos de la hora (0-59).

toSecond

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número de segundos del minuto (0-59). No se tienen en cuenta los segundos intercalares.

toUnixTimestamp

Convierte una fecha (Date) o una fecha con hora (DateTime) en una marca de tiempo Unix.

toStartOfYear

Redondea hacia abajo una fecha (Date) o una fecha con hora (DateTime) al primer día del año. Devuelve la fecha (Date).

toStartOfISOYear

Redondea una fecha (Date) o una fecha con hora (DateTime) al primer día del año ISO. Devuelve la fecha (Date).

toStartOfQuarter

Redondea una fecha (Date) o una fecha con hora (DateTime) al primer día del trimestre (1 de enero, 1 de abril, 1 de julio o 1 de octubre). Devuelve la fecha (Date).

toStartOfMonth

Redondea una fecha (Date) o una fecha con hora (DateTime) al primer día del mes. Devuelve la fecha (Date).

toMonday

Redondea una fecha (Date) o una fecha con hora (DateTime) al lunes más cercano. Devuelve la fecha (Date).

toStartOfDay

Redondea una fecha (Date) o una fecha con hora (DateTime) al inicio del día.

toStartOfHour

Redondea una fecha (Date) o una fecha con hora (DateTime) al inicio de la hora.

toStartOfMinute

Redondea una fecha (Date) o una fecha con hora (DateTime) al inicio del minuto.

toStartOfFiveMinute

Redondea una fecha (Date) o una fecha con hora (DateTime) al inicio del intervalo de cinco minutos.

toStartOfTenMinutes

Redondea una fecha (Date) o una fecha con hora (DateTime) al inicio del intervalo de diez minutos.

toStartOfFifteenMinutes

Redondea una fecha (Date) o una fecha con hora (DateTime) al inicio del intervalo de quince minutos.

toTime

Convierte una fecha (Date) o una fecha con hora (DateTime) a una fecha fija determinada y conserva la hora.

toRelativeYearNum

Convierte una fecha (Date) o una fecha con hora (DateTime) al número del año, desde un punto fijo determinado en el pasado.

toRelativeQuarterNum

Convierte una fecha (Date) o una fecha con hora (DateTime) al número del trimestre, desde un punto fijo determinado en el pasado.

toRelativeMonthNum

Convierte una fecha (Date) o una fecha con hora (DateTime) al número del mes, desde un punto fijo determinado en el pasado.

toRelativeWeekNum

Convierte una fecha (Date) o una fecha con hora (DateTime) en el número de la semana, a partir de un punto fijo determinado en el pasado.

toRelativeDayNum

Convierte una fecha (Date) o una fecha con hora (DateTime) en el número del día, a partir de un punto fijo determinado en el pasado.

toRelativeHourNum

Convierte una fecha (Date) o una fecha con hora (DateTime) al número de la hora, desde un punto fijo determinado en el pasado.

toRelativeMinuteNum

Convierte una fecha (Date) o una fecha con hora (DateTime) al número del minuto, a partir de un punto fijo determinado en el pasado.

toRelativeSecondNum

Convierte una fecha (Date) o una fecha con hora (DateTime) en el número de segundos, desde un punto fijo determinado en el pasado.

toISOYear

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt16 con el número de año ISO.

toISOWeek

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt8 con el número de semana ISO.

ahora

Acepta cero argumentos. Devuelve la hora actual en el momento de la ejecución de la función. Esta función devuelve una constante.

hoy

Acepta cero argumentos. Devuelve la fecha actual en el momento de la ejecución de la función. Es lo mismo que toDate (now ()).

ayer

Acepta cero argumentos. Devuelve la fecha de ayer en el momento de la ejecución de la función. Es lo mismo que today () - 1.

timeSlot

Redondea la hora a la media hora más cercana.

toYYYYMM

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt32 con el año y el mes (YYYY * 100 + MM).

toYYYYMMDD

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt32 con el año y el mes (YYYY * 10000 + MM * 100 + DD).

toYYYYMMDDhhmmss

Convierte una fecha (Date) o una fecha con hora (DateTime) en un número UInt64 con el año y el mes (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss).

addYears, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addQuarters

Esta función agrega un intervalo Date/DateTime a una variable Date/DateTime y, a continuación, devuelve Date/DateTime.

subtractYears, subtractMonths, subtractWeeks, subtractDays, subtractHours, subtractMinutes, subtractSeconds, subtractQuarters

Esta función resta un intervalo Date/DateTime a una variable Date/DateTime y, a continuación, devuelve Date/DateTime.

dateDiff(“unit”, t1, t2, [timezone])

Devuelve la diferencia entre dos horas expresadas en unidad, por ejemplo horas. t1 y t2 pueden ser Date o DateTime. Si se especifica zona horaria, se aplica a ambos argumentos. Si no es así, se utilizan las zonas horarias de los tipos de datos t1 y t2. Si las zonas horarias no son las mismas, el resultado es indeterminado.

Valores de unidad admitidos: segundo, minuto, hora, día, semana, mes, trimestre, año.

formatDateTime(Time, Format[, Timezone])

Esta función da formato a Time, según el formato especificado en la cadena Format. Para obtener más información sobre los parámetros de formato, vaya a %%.

Códigos de Formato para la Función formatDateTime

Esta tabla describe los códigos de formato para la función formatDateTime con ejemplos:

Código Descripción Ejemplo

%C

Año dividido entre 100 y truncado a un número entero (00-99).

20

%d

Día del mes, con relleno de ceros (01-31).

02

%D

Fecha corta MM/DD/AA, equivalente a %m/%d/%y.

01/07/2023

%e

Día del mes, con relleno de espacios ( 1-31)

2

%F

Fecha corta AAAA-MM-DD, equivalente a %Y-%m-%d.

2023-01-07

%H

Hora en formato de 24 horas (00-23).

22

%I

Hora en formato de 12 horas (01-12).

10

%j

Día del año (001-366).

007

%m

Mes como número decimal (01-12).

01

%M

Minuto (00-59).

33

%n

Caracter de nueva línea. '\n'.

%p

AM o PM.

PM

%R

Hora en formato de 24 horas HH:MM, equivalente a %H:%M.

22:33

%S

Segundo (00-59).

44

%t

Caracter de tabulación horizontal (‘\t').

%T

Formato de hora ISO 8601 (HH:MM:SS), equivalente a %H:%M:%S.

22:33:44

%u

Día de la semana ISO 8601 como número, siendo lunes 1 (1-7).

2

%V

Número de la semana ISO 8601 (01-53).

01

%w

Día de la semana como número decimal, siendo domingo 0 (0-6).

2

%y

Año, dos últimos dígitos (00-99).

23

%Y

Año

2023

%%

Un signo %.

Funciones para Trabajar con Cadenas

Esta tabla describe las funciones de Cadenas:

Función Descripción

vacío

Devuelve 1 para una cadena vacía o 0 para una cadena no vacía. El tipo de resultado es UInt8. Una cadena se considera no vacía si contiene al menos un byte, incluso si se trata de un espacio o un byte nulo.

notEmpty

Devuelve 0 para una cadena vacía o 1 para una cadena no vacía. El tipo de resultado es UInt8. La función también funciona para arrays.

longitud

Devuelve la longitud de una cadena en bytes (no en caracteres ni en puntos de código). El tipo de resultado es UInt64.

lengthUTF8

Devuelve la longitud de una cadena en puntos de código Unicode (no en caracteres), cuando la cadena contiene un conjunto de bytes que forman texto codificado en UTF-8. Si la cadena no cumple el requisito UTF-8, no se genera una excepción. El tipo de resultado es UInt64.

char_length, CHAR_LENGTH

Devuelve la longitud de una cadena en puntos de código Unicode (no en caracteres), suponiendo que la cadena contiene un conjunto de bytes que forman texto codificado en UTF-8. Si no se cumple esta suposición, no se genera una excepción. El tipo de resultado es UInt64.

character_length, CHARACTER_LENGTH

Devuelve la longitud de una cadena en puntos de código Unicode (no en caracteres), suponiendo que la cadena contiene un conjunto de bytes que forman texto codificado en UTF-8. Si no se cumple esta suposición, no se genera una excepción. El tipo de resultado es UInt64.

lower, lcase

Convierte los símbolos Latinos ASCII de una cadena a minúsculas.

upper, ucase

Convierte los símbolos Latinos ASCII de una cadena a mayúsculas.

lowerUTF8

Convierte una cadena a minúsculas, suponiendo que la cadena contiene un conjunto de bytes que forman un texto codificado en UTF-8. No detecta el idioma. Si la longitud de la secuencia de bytes UTF-8 es diferente para mayúsculas y minúsculas de un punto de código, el resultado podría ser incorrecto. Si la cadena contiene un conjunto de bytes que no es UTF-8, el comportamiento es indefinido.

upperUTF8

Convierte una cadena a mayúsculas, asumiendo que la cadena contiene un conjunto de bytes que forman un texto codificado en UTF-8. No detecta el idioma. Si la longitud de la secuencia de bytes UTF-8 es diferente para mayúsculas y minúsculas de un punto de código, el resultado podría ser incorrecto. Si la cadena contiene un conjunto de bytes que no es UTF-8, el comportamiento es indefinido.

isValidUTF8

Devuelve 1 si el conjunto de bytes constituye un texto válido codificado en UTF-8; de lo contrario, devuelve 0.

reverse

Invierte la cadena (como una secuencia de bytes).

reverseUTF8

Invierte una secuencia de puntos de código Unicode, suponiendo que la cadena contiene un conjunto de bytes que representan un texto UTF-8. De lo contrario, no lanza una excepción.

concat(s1, s2, ...)

Concatena las cadenas listadas en los argumentos, sin separador.

concatAssumeInjective(s1, s2, ...)

Igual que concat. La diferencia es que debe asegurarse de que concat (s1, s2, s3) -> s4 sea inyectivo. Se utiliza para optimizar la cláusula GROUP BY.

substring(s, offset, length), mid(s, offset, length), substr(s, offset, length)

Devuelve una subcadena que comienza con el byte del índice offset y tiene una longitud de length bytes. La indexación de caracteres comienza desde uno (como en SQL estándar). Los argumentos offset y length deben ser constantes.

substringUTF8(s, offset, length)

Igual que substring, pero para puntos de código Unicode. Funciona bajo el supuesto de que la cadena contiene un conjunto de bytes que representan un texto codificado en UTF-8. Si no se cumple esta suposición, no se genera una excepción.

appendTrailingCharIfAbsent(s, c)

Si la cadena s contiene caracteres, pero no contiene el carácter c al final, añade el carácter c al final.

convertCharset(s, from, to)

Devuelve la cadena s que se convirtió de la codificación en from a la codificación en to.

base64Encode(s)

Codifica la cadena s en base64.

base64Decode(s)

Decodifica la cadena s codificada en base64 a su cadena original. En caso de fallo, genera una excepción.

tryBase64Decode(s)

Decodifica la cadena s codificada en base64 a su cadena original. En caso de fallo, devuelve una cadena vacía.

endsWith(s, sufijo)

Devuelve 1 si la cadena termina con el sufijo especificado; de lo contrario, devuelve 0.

startsWith(s, prefijo)

Devuelve 1 si la cadena comienza con el prefijo especificado; de lo contrario, devuelve 0.

trimLeft(s)

Devuelve una cadena que elimina los caracteres de espacio en blanco del lado izquierdo.

trimRight(s)

Devuelve una cadena que elimina los caracteres de espacio en blanco del lado derecho.

trimBoth(s)

Devuelve una cadena que elimina los caracteres de espacio en blanco de ambos lados.

Funciones para Buscar Cadenas

La búsqueda distingue entre mayúsculas y minúsculas de forma predeterminada en todas estas funciones. Existen variantes independientes para la búsqueda que no distingue entre mayúsculas y minúsculas. Esta tabla describe las funciones de búsqueda:

Función Descripción

position(haystack, needle), locate(haystack, needle)

Busca la subcadena needle en la cadena haystack. Devuelve la posición (en bytes) de la subcadena encontrada, empezando por 1, o devuelve 0 si no se encontró la subcadena.

Para una búsqueda que no distinga entre mayúsculas y minúsculas, utilice la función positionCaseInsensitive.

positionUTF8(haystack, needle)

Igual que position, pero la posición se devuelve en puntos de código Unicode cuando la cadena contiene un conjunto de bytes que representan un texto codificado en UTF-8. Si no se cumple este requisito, no se genera una excepción.

Para una búsqueda que no distinga entre mayúsculas y minúsculas, utilice la función positionCaseInsensitiveUTF8.

multiSearchFirstPosition(haystack, [needle1, needle2, ..., needlen])

Igual que position, pero devuelve el desplazamiento más a la izquierda de la cadena haystack que coincide con alguno de los needle.

Para una búsqueda que no distinga entre mayúsculas y minúsculas y una búsqueda en formato UTF-8, utilice estas funciones: multiSearchFirstPositionCaseInsensitive

multiSearchFirstPositionUTF8

multiSearchFirstPositionCaseInsensitiveUTF8

multiSearchFirstIndex(haystack, [needle1, needle2, ..., needlen])

Devuelve el índice i (empezando por 1) de needle más a la izquierda encontrada en la cadena haystack y 0 en caso contrario.

Para una búsqueda que no distinga entre mayúsculas y minúsculas y una búsqueda en formato UTF-8, utilice estas funciones: multiSearchFirstIndexCaseInsensitive multiSearchFirstIndexUTF8 multiSearchFirstIndexCaseInsensitiveUTF8

multiSearchAny(haystack, [needle1, needle2, ..., needlen])

Devuelve 1 si al menos una cadena needle coincide con la cadena haystack y 0 en caso contrario.

Para una búsqueda que no distinga entre mayúsculas y minúsculas o en formato UTF-8, utilice estas funciones: multiSearchAnyCaseInsensitive, multiSearchAnyUTF8, multiSearchAnyCaseInsensitiveUTF8.

En todas las funciones multiSearch *, el número de parámetros needle debe ser inferior a 28.

match(haystack, pattern)

Comprueba si la cadena coincide con la expresión regular pattern. La sintaxis de las expresiones regulares re2 es más limitada que la sintaxis de las expresiones regulares Perl.

Devuelve 0 si no coincide, o 1 si coincide.

El símbolo de barra invertida (\) se utiliza para escapar la expresión regular. El mismo símbolo se utiliza para escapar literales de cadena. Para escapar el símbolo en una expresión regular, debe escribir dos barras invertidas (\\) en un literal de cadena.

La expresión regular funciona con la cadena como si fuera un conjunto de bytes. La expresión regular no puede contener bytes nulos. Para los patrones que buscan subcadenas en una cadena, es mejor utilizar LIKE o posición, ya que funcionan más rápido.

multiMatchAny(haystack, [pattern1, pattern2, ..., patternn])

Comprueba si la cadena coincide con la expresión regular pattern. Devuelve 0 si ninguna de las expresiones regulares coincide y 1 si alguno de los patrones coincide. Para los patrones que buscan subcadenas en una cadena, es mejor utilizar multiSearchAny, ya que funciona más rápido.

La longitud de cualquiera de las cadenas haystack debe ser inferior a 232 bytes, de lo contrario se generará una excepción.

multiMatchAnyIndex(haystack, [pattern1, pattern2, ..., patternn])

Comprueba si la cadena coincide con la expresión regular pattern. Devuelve 0 si ninguna de las expresiones regulares coincide y 1 si alguno de los patrones coincide. Devuelve cualquier índice que coincida con haystack.

multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, ..., patternn])

Igual que multiMatchAny, pero devuelve 1 si cualquier pattern coincide con haystack dentro de una distancia de edición constante. Esta función está en modo experimental y puede ser muy lenta.

multiFuzzyMatchAnyIndex(haystack, distance, [pattern1, pattern2, ..., patternn])

Igual que multiFuzzyMatchAny, pero devuelve cualquier índice que coincida con haystack dentro de una distancia de edición constante.

Las funciones multiFuzzyMatch * no admiten expresiones regulares UTF-8. Se tratan como bytes.

extract(haystack, pattern)

Extrae un fragmento de una cadena con una expresión regular. Si haystack no coincide con la expresión regular pattern, se devuelve una cadena vacía. Si la expresión regular no contiene subpatrones, toma el fragmento que coincide con toda la expresión regular. De lo contrario, toma el fragmento que coincide con el primer subpatrón.

like(haystack, pattern), haystack LIKE pattern operator

Comprueba si una cadena coincide con una expresión regular simple. La expresión regular puede contener estos símbolos:

  • ‘%’ — Indica cualquier cantidad de bytes (incluidos los caracteres cero).

  • ‘_’ — Indica cualquier byte.

Utilice la barra invertida (\) para escapar los metasímbolos.

El símbolo de barra invertida (\) se utiliza para escapar la expresión regular. El mismo símbolo se utiliza para escapar literales de cadena. Para escapar el símbolo en una expresión regular, debe escribir dos barras invertidas (\\) en un literal de cadena.

Para expresiones regulares como %needle%, el código es más óptimo y funciona tan rápido como la función position. Para otras expresiones regulares, el código es el mismo que para la función match.

notLike(haystack, pattern), haystack NOT LIKE pattern operator

Filtra los registros que no coinciden con un pattern especificado. La expresión regular puede contener estos símbolos:

  • ‘%’ — Indica cualquier cantidad de bytes (incluidos los caracteres cero).

  • ‘_’ — Indica cualquier byte.

Utilice la barra invertida (\) para escapar los metasímbolos.

Funciones para Reemplazar Cadenas

Esta tabla describe las funciones para reemplazar cadenas:

Función Descripción

replaceOne(haystack, pattern, replacement)

Reemplaza la primera incidencia, si existe, de la subcadena pattern en haystack por la subcadena replacement. pattern y replacement deben ser constantes.

replaceAll(haystack, pattern, replacement), replace(haystack, pattern, replacement)

Reemplaza todas las incidencias de la subcadena pattern en haystack por la subcadena replacement.

replaceRegexpOne(haystack, pattern, replacement)

Reemplazo utilizando la expresión regular pattern. Una expresión regular re2. Sustituye solo la primera incidencia, si existe. Se puede especificar un pattern como replacement. Este pattern puede incluir sustituciones \0 - \9. La sustitución \0 incluye la expresión regular completa. Las sustituciones \1 - \9 corresponden a los números de los subpatrones. Para utilizar el carácter \ en una plantilla, utilice otro \ para escapar. Recuerde que una cadena literal requiere un escape adicional.

Por ejemplo, esta función copiará una cadena diez veces:

SELECT replaceRegexpOne ('Hello, World!', '. *', '\\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0) AS res

Resultado:

Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! ¦

replaceRegexpAll(haystack, pattern, replacement)

Reemplazo utilizando la expresión regular pattern. Reemplaza todas las incidencias.

Ejemplo:

SELECT replaceRegexpAll('Hello, World!', '.', '\\0\\0') AS res

HHeelllloo,, WWoorrlldd!!

Si una expresión regular funciona en una subcadena vacía, la sustitución no se realiza más de una vez.

Ejemplo:

SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res

aquí: Hello, World!

regexpQuoteMeta(s)

La función agrega una barra invertida antes de algunos caracteres predefinidos en la cadena. Caracteres predefinidos: '0', '\', '|', '(', ')', '^', '$', '.', '[', ']', '?', '*' , '+', '{', ':', '-'.

Esta implementación es diferente de re2. Escapa el byte cero como \0 en lugar de \x00, y solo escapa los caracteres necesarios.

Funciones Matemáticas

Todas estas funciones devuelven un número Float64. La precisión del resultado es cercana a la máxima posible, pero puede que no coincida con el número representable por la máquina más cercano al número real correspondiente.

Función Descripción

e()

Devuelve un número Float64 cercano al número e.

pi()

Devuelve un número Float64 cercano al número π.

exp(x)

Acepta un argumento numérico y devuelve un número Float64 cercano al exponente del argumento.

log(x), ln(x)

Acepta un argumento numérico y devuelve un número Float64 cercano al logaritmo natural del argumento.

exp2(x)

Acepta un argumento numérico y devuelve un número Float64 cercano a 2 elevado a x.

log2(x)

Acepta un argumento numérico y devuelve un número Float64 cercano al logaritmo binario del argumento.

exp10(x)

Acepta un argumento numérico y devuelve un número Float64 cercano a 10 elevado a x.

log10(x)

Acepta un argumento numérico y devuelve un número Float64 cercano al logaritmo decimal del argumento.

sqrt(x)

Acepta un argumento numérico y devuelve un número Float64 cercano a la raíz cuadrada del argumento.

cbrt(x)

Acepta un argumento numérico y devuelve un número Float64 cercano a la raíz cúbica del argumento.

erf(x)

Si x es no negativo, entonces erf es la probabilidad de que una variable aleatoria con una distribución normal con desviación estándar s tome el valor que está separado del valor esperado por más de x.

erfc(x)

Acepta un argumento numérico y devuelve un número Float64 cercano a 1 - erf (x), pero sin pérdida de precisión para valores grandes de x.

lgamma(x)

El logaritmo de la función gamma.

tgamma(x)

Función gamma.

sin(x)

Seno.

cos(x)

Coseno.

tan(x)

Tangente.

asin(x)

Arcoseno.

acos(x)

Arcocoseno.

atan(x)

Arcotangente.

pow(x, y), power(x, y)

Toma dos argumentos numéricos x e y para devolver un número Float64 cercano a x elevado a y.

intExp2

Acepta un argumento numérico y devuelve un número UInt64 cercano a 2 elevado a x.

intExp10

Acepta un argumento numérico y devuelve un número UInt64 cercano a 10 elevado a x.

Funciones de Redondeo

Función Descripción

floor(x[, N])

Devuelve el número redondeado más grande que es menor o igual que x. Un número redondeado es un múltiplo de 1/10N, o el número más cercano del tipo de datos apropiado si 1 / 10N no es exacto. N es una constante entera, parámetro opcional. Por defecto, es cero. Esto redondea el número a un entero. N puede ser negativo.

Ejemplos:

floor (123.45, 1) = 123.4

floor (123.45, -1) = 120.

x es cualquier tipo numérico. El resultado es un número del mismo tipo. Para argumentos enteros, tiene sentido redondear con un valor N negativo. Para un N no negativo, la función no hace nada.

ceil(x[, N]), ceiling(x[, N])

Devuelve el número redondeado más pequeño que sea mayor o igual que x. En todos los demás aspectos, es igual que la función floor.

round(x[, N])

Redondea x a un número especificado de decimales (N). Redondea al entero par más cercano. Cuando el número dado tiene la misma distancia a los números circundantes, la función devuelve el número que tiene el dígito par más cercano.

Parametros:

  • x — El número a redondear. Puede ser cualquier expresión que devuelva el tipo de datos numérico.
  • N — Un valor entero.
    • Si N > 0, la función redondea el valor a la derecha del punto decimal.
    • Si N < 0, la función redondea el valor a la izquierda del punto decimal.
    • Si N = 0, la función redondea el valor a un entero. En este caso, se puede omitir el argumento.

El valor devuelto es el número redondeado del mismo tipo que el número de entrada.

roundToExp2(num)

Acepta un número. Si el número es menor que uno, devuelve 0. De lo contrario, redondea el número hacia abajo al grado más cercano (entero no negativo) de dos.

Funciones de Generación de Números Aleatorios

Se utilizan generadores no criptográficos de números pseudoaleatorios. Todas las funciones aceptan cero argumentos o un argumento. Si se pasa un argumento, puede ser de cualquier tipo y su valor no se utiliza para nada. El propósito de este argumento es evitar la eliminación de subexpresiones comunes, de modo que dos instancias diferentes de la misma función devuelvan columnas diferentes con números aleatorios diferentes.

Función Descripción

rand

Devuelve un número UInt32 pseudoaleatorio, distribuido uniformemente entre todos los números de tipo UInt32. Utiliza un generador lineal congruente.

rand64

Devuelve un número UInt64 pseudoaleatorio, distribuido uniformemente entre todos los números de tipo UInt64. Utiliza un generador lineal congruente.

randConstant

Devuelve un número UInt64 pseudoaleatorio, distribuido uniformemente entre todos los números de tipo UInt64.

Funciones de Codificación

Esta tabla describe las funciones de codificación:

Función Descripción

hex

Acepta argumentos de los tipos: String, UInt, Date o DateTime. Devuelve una cadena que contiene la representación hexadecimal del argumento. Utiliza letras mayúsculas A-F. No utiliza prefijos 0x ni sufijos h. Para las cadenas de caracteres, todos los bytes se codifican simplemente como dos números hexadecimales. Los números se convierten al formato big-endian. La fecha se codifica como el número de días transcurridos desde el inicio del tiempo Unix. La fecha y la hora se codifican como el número de segundos desde el inicio del tiempo Unix.

unhex(str)

Acepta una cadena que contiene cualquier número de dígitos hexadecimales y devuelve una cadena que contiene los bytes correspondientes. Admite letras A-F mayúsculas y minúsculas. El número de dígitos hexadecimales no tiene que ser par. Si es impar, el último dígito se interpreta como la mitad más joven del byte 00-0F. Si la cadena de argumentos contiene cualquier cosa que no sean dígitos hexadecimales, no se genera una excepción. Si desea convertir el resultado en un número, puede utilizar las funciones reverse y reinterpretAsType.

bitmaskToList(num)

Acepta un entero. Devuelve una cadena que contiene la lista de potencias de dos que suman el número de origen. Están separadas por comas sin espacios en formato de texto, en orden ascendente.

Funciones para Trabajar con URL

Esta tabla describe las funciones que trabajan con URL:

Función Descripción

protocol

Devuelve el protocolo (por ejemplo, http, ftp, mailto, imap).

dominio

Devuelve el dominio.

domainWithoutWWW

Devuelve el dominio y elimina como máximo un 'www.' del principio, si está presente.

topLevelDomain

Devuelve el dominio de nivel superior. Por ejemplo, .com.

firstSignificantSubdomain

Devuelve el primer subdominio significativo.

  • El primer subdominio significativo es un dominio de segundo nivel si es "com", "net", "org" o "co".
  • De lo contrario, es un dominio de tercer nivel.

cutToFirstSignificantSubdomain

Devuelve la parte del dominio que incluye los subdominios de nivel superior hasta el primer subdominio significativo.

path

Devuelve la ruta. La ruta no incluye la cadena de consulta.

pathFull

Devuelve la ruta que incluye la cadena de consulta y el fragmento.

Ejemplo: /top/news.html?page=2#comments

queryString

Devuelve la cadena de consulta. La cadena de consulta no incluye lo siguiente:

  • Signo de interrogación inicial (?),
  • #
  • Cualquier cosa después de #.

fragmenttext

Devuelve el identificador del fragmento. No incluye el símbolo hash inicial #.

queryStringAndFragment

Devuelve la cadena de consulta y el identificador del fragmento.

extractURLParameter(URL, name)

Devuelve el valor del parámetro name en la URL, si existe. De lo contrario, devuelve una cadena vacía. Si hay muchos parámetros con este nombre, devuelve la primera instancia. Esta función asume que el nombre del parámetro está codificado en la URL exactamente igual que en el argumento pasado.

extractURLParameters(URL)

Devuelve un array de cadenas name=value que corresponden a los parámetros de la URL. Los valores no se decodifican de ninguna manera.

extractURLParameterNames(URL)

Devuelve un array de cadenas nombre que corresponden a los nombres de los parámetros de la URL. Los valores no se decodifican de ninguna manera.

URLHierarchy(URL)

Devuelve un array que contiene la URL, truncada al final por los símbolos /,? en la ruta y la cadena de consulta. Los caracteres separadores consecutivos se cuentan como uno. El corte se realiza en la posición posterior a todos los caracteres separadores consecutivos.

Ejemplo:

URLPathHierarchy('https://example.com/browse/CONV-6788') =
[
'/browse/',
'/browse/CONV-6788'
]

URLPathHierarchy(URL)

Devuelve el mismo resultado que URLHierarchy(URL), pero sin el protocolo y el host en el resultado. El elemento /’ (root) no se incluye.

decodeURLComponent(URL)

Devuelve la URL decodificada.

cutWWW

Elimina como máximo un "www." del principio del dominio de la URL, si está presente.

cutQueryString

Elimina la cadena de consulta. También se elimina el signo de interrogación.

cutFragment

Elimina el identificador de fragmento. También se elimina el signo numérico.

cutQueryStringAndFragment

Elimina la cadena de consulta y el identificador de fragmento. También se eliminan el signo de interrogación y el signo numérico.

cutURLParameter(URL, name)

Elimina el parámetro URL 'name', si está presente. Esta función opera bajo el supuesto de que el nombre del parámetro está codificado en la URL exactamente de la misma manera que en el argumento pasado.

Funciones para Trabajar con Direcciones IP

Esta tabla describe las funciones que trabajan con direcciones IP:

Función Descripción

IPv4NumToString (num)

Toma un número UInt32 y lo interpreta como una dirección IPv4 en big-endian. Devuelve una cadena que contiene la dirección IPv4 correspondiente en el formato A.B.C.D (números separados por puntos en formato decimal).

IPv4StringToNum(s)

La función inversa de IPv4NumToString. Si la dirección IPv4 tiene un formato no válido, devuelve 0.

IPv4NumToStringClassC(num)

Similar a IPv4NumToString, pero utiliza xxx en lugar del último octeto.

IPv6NumToString(x)

Acepta un valor FixedString(16) que contiene la dirección IPv6 en formato binario. Devuelve una cadena que contiene esta dirección en formato de texto. Las direcciones IPv4 asignadas en IPv6 se muestran en el formato :: ffff: 111.222.33.44.

IPv6StringToNum(s)

La función inversa de IPv6NumToString. Si la dirección IPv6 tiene un formato no válido, devuelve una cadena de bytes nulos. HEX puede estar en mayúsculas o minúsculas.

IPv4ToIPv6(x)

Toma un número UInt32 y lo interpreta como una dirección IPv4 en big-endian. Devuelve un valor FixedString(16) que contiene la dirección IPv6 en formato binario.

cutIPv6(x, bitsToCutForIPv6, bitsToCutForIPv4)

Acepta un valor FixedString(16) que contiene la dirección IPv6 en formato binario. Devuelve una cadena que contiene la dirección del número especificado de bits eliminados en formato de texto.

IPv4CIDRtoIPv4Range(ipv4, cidr)

Acepta un valor IPv4 y un valor UInt8 que contiene el CIDR. Devuelve una tupla con dos valores IPv4 que contiene el rango inferior y el rango superior de la subred.

IPv6CIDRtoIPv6Range(ipv6, cidr)

Acepta un valor IPv6 y un valor UInt8 que contiene el CIDR. Devuelve una tupla con dos valores IPv6 que contiene el rango inferior y el rango superior de la subred.

Funciones para Trabajar con Argumentos Anulables

Función Descripción

isNull(x)

Comprueba si el argumento es NULL.

Parametros:

  • x — Un valor con un tipo de datos no compuesto.

Valor devuelto:

  • 1 — Si x es NULL.
  • 0 — Si x no es NULL.

isNotNull (x)

Parametros:

  • x — Un valor con un tipo de datos no compuesto.

Valor devuelto:

  • 0 — Si x es NULL.
  • 1 — Si x no es NULL.

coalesce(x,...)

  • Parámetros — Cualquier número de parámetros de un tipo no compuesto. Todos los parámetros deben ser compatibles por tipo de datos.
  • Valores devueltos — El primer argumento no NULL. NULL, si todos los argumentos son NULL.

ifNull

Devuelve un valor alternativo si el argumento principal es NULL.

ifNull (x, alt)

Parametros:

  • x — El valor que se debe comprobar si es NULL.
  • alt — El valor que devuelve la función si x es NULL.

Valores devueltos:

  • El valor x, si x no es NULL.
  • El valor alt, si x es NULL.

nullIf(x,y)

Devuelve NULL si los argumentos son iguales.

Parametros:

  • x, y — Valores para la comparación. Deben ser tipos compatibles, de lo contrario, la solución generará una excepción.

Valores devueltos:

  • NULL, si los argumentos son iguales.
  • El valor x, si los argumentos no son iguales.

assumeNotNull(x)

Parametros:

  • x — El valor original.

Valores devueltos:

  • El valor original del tipo no anulable, si no es NULL.
  • El valor predeterminado para el tipo no anulable si el valor original era NULL.

toNullable(x)

Convierte el tipo del argumento a anulable.

Parametros:

  • x — El valor de cualquier tipo no compuesto.

Valor devuelto:

  • El valor de entrada con un tipo no anulable.

Temas Relacionados

Sintaxis SQL de Consulta Avanzada

Funciones Agregadas

Sintaxis de la Cláusula Select

Tipos de Datos Admitidos