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
- Funciones de Comparación
- Funciones Lógicas
- Funciones de Conversión de Tipos
- Funciones para Trabajar con Cadenas
- Funciones para Buscar Cadenas
- Funciones para Reemplazar Cadenas
- Funciones Matemáticas
- Funciones de Redondeo
- Funciones de Generación de Números Aleatorios
- Funciones de Codificación
- Funciones para Trabajar con URL
- Funciones para Trabajar con Direcciones IP
- Funciones para Trabajar con Argumentos Anulables
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:
- Equals — a = b y a == b
- NotEquals — a != b y a <> b
- Less — a < b
- Greater — a > b
- LessOrEquals — a <= b
- GreaterOrEquals — a >= 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".
-
AND — AND
-
OR — OR
-
Not — NOT
-
Xor — XOR
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:
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:
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:
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.
|
|
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:
|
|
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:
Valor devuelto:
|
|
isNotNull (x) |
Parametros:
Valor devuelto:
|
|
coalesce(x,...) |
|
|
ifNull |
Devuelve un valor alternativo si el argumento principal es NULL. |
|
ifNull (x, alt) |
Parametros:
Valores devueltos:
|
|
nullIf(x,y) |
Devuelve NULL si los argumentos son iguales. Parametros:
Valores devueltos:
|
|
assumeNotNull(x) |
Parametros:
Valores devueltos:
|
|
toNullable(x) |
Convierte el tipo del argumento a anulable. Parametros:
Valor devuelto:
|
Sintaxis SQL de Consulta Avanzada