RIGHT()

2 comentarios

Descripción: Devuelve la parte más a la derecha de la cadena alfanumérica que es su primer argumento. La cantidad de caracteres devueltos está dada por su segundo argumento

Tipo de resultado: Varchar o BLOB

Sintaxis:

RIGHT(cadena_alfanumérica, longitud)

  • Si cadena_alfanumeríca es un BLOB, el resultado es un BLOB. En los demás casos el resultado es un VARCHAR(n) donde n es la longitud de cadena_alfanumérica.
  • Si la longitud es mayor que la cantidad de caracteres de cadena_alfanumérica, se devuelve cadena_alfanumérica.
  • Si la longitud no es un número entero entonces se aplica el redondeo de los banqueros (redondeo al par más próximo), es decir: 0.5 se convierte en 0; 1.5 se convierte en 2; 2.5 se convierte en 2; 3.5 se convierte en 4; etc.

Ejemplo:

SELECT
   RIGHT('NAPOLEÓN BONAPARTE', 5)
FROM
   RDB$DATABASE

Este SELECT devolverá ‘PARTE’

Cuidado:

Si cadena_alfanumérica es un BLOB todo el objeto deberá ser cargado en memoria y si ese BLOB es muy grande eso afectará la performance.

.

REVERSE()

1 comentario

Descripción: Devuelve una cadena alfanumérica con el orden de los caracteres invertidos.

Tipo de resultado: Varchar

Sintaxis:

REVERSE(cadena_alfanumérica)

Ejemplos:


SELECT
   REVERSE('NAPOLEÓN')
FROM
   RDB$DATABASE

SELECT
   REVERSE('DABALE ARROZ A LA ZORRA EL ABAD')
FROM
   RDB$DATABASE

El primer SELECT devolverá ‘NÓELOPAN’

El segundo SELECT devolverá ‘DABA LE ARROZ AL A ZORRA ELABAD’

Consejo:

Esta función te puede ser muy útil cuando quieres agrupar, buscar u ordenar por la parte final de una cadena alfanumérica, por ejemplo cuando estás tratando con nombres de dominio de Internet o con direcciones de e-mail.


CREATE INDEX IX_EMAIL_PERSONAS ON PERSONAS
             COMPUTED BY (REVERSE(PER_EMAILX))

SELECT
   *
FROM
   PERSONAS
WHERE
   REVERSE(PER_EMAILX) STARTING WITH REVERSE('.com')

.

REPLACE()

2 comentarios

Descripción: Reemplaza todas las ocurrencias de una subcadena en una cadena alfanumérica

Tipo de resultado: Varchar o Blob

Sintaxis:

REPLACE(cadena_alfanumérica, cadena_buscada, cadena_de_reemplazo)

  • Si cualquiera de los argumentos es un BLOB, el resultado será un BLOB. En los demás casos el resultado será un Varchar(n) donde n es calculado según las longitudes de cadena_alfanumérica, cadena_buscada y cadena_de_reemplazo en tal forma que ni siquiera con el máximo número de reemplazos se sobrepasará la longitud de cadena_alfanumérica.
  • Si cadena_buscada está vacía, cadena_alfanumérica es devuelta sin cambios
  • Si cadena_de_reemplazo está vacía, todas las ocurrencias de cadena_buscada son eliminadas de cadena_alfanumérica
  • Si cualquiera de los argumentos es NULL, el resultado siempre será NULL

Ejemplos:

SELECT
   REPLACE('NAPOLEÓN BONAPARTE', 'LEÓN', 'TIGRE')
FROM
   RDB$DATABASE

SELECT
   REPLACE('NAPOLEÓN BONAPARTE', 'BONA', 'MALÍSIMA')
FROM
   RDB$DATABASE

SELECT
   REPLACE('NAPOLEÓN BONAPARTE', 'BONAPARTE', '')
FROM
   RDB$DATABASE

El primer SELECT devolverá ‘NAPOTIGRE BONAPARTE’

El segundo SELECT devolverá ‘NAPOLEÓN MALÍSIMAPARTE’

El tercer SELECT devolverá ‘NAPOLEÓN ‘

.

RDB$SET_CONTEXT()

3 comentarios

Descripción: Crea, pone o saca una variable en uno de los namespaces que el usuario puede escribir: USER_SESSION y USER_TRANSACTION

Tipo de resultado: Integer

Sintaxis:

RDB$SET_CONTEXT(‘<namespace<‘, ‘<nombre_variable>’, <valor> | NULL)

<namespace> = USER_SESSION | USER_TRANSACTION

<nombre_variable> = una cadena (que distingue mayúsculas de minúsculas) de máximo 80 caracteres

<valor> = Un valor de cualquier tipo siempre que pueda convertirse a Varchar(255)

Los namespaces

Los namespaces USER_SESSION y USER_TRANSACTION inicialmente están vacíos. El programador puede crear y poner variables en ellos con RDB$SET_CONTEXT() y recuperar esas variables con RDB$GET_CONTEXT(). El contexto de USER_SESSION está enlazado a la conexión actual. Las variables en USER_TRANSACTION solamente existen en la transacción que puso esas variables, eso significa que cuando la transacción finaliza el contexto y todas las variables definidas allí son destruídas.

Valor de retorno y comportamiento del error

Esta función devuelve 1 si la variable ya existía antes de la llamada o 0 si no existía. Para eliminar una variable del contexto, poner su valor a NULL. Si el namespace especificado no existe, ocurrirá un error. Tanto el namespace como el nombre de la variable deben ser introducidos como cadenas alfanuméricas que no sean NULL, que estén en mayúsculas y rodeadas por apóstrofos.

Ejemplos:

SELECT
   RDB$SET_CONTEXT('USER_SESSION', 'MiVariable', 2104)
FROM
   RDB$DATABASE

SELECT
   RDB$SET_CONEXT('USER_SESSION', 'TotalFilas', nCantidadFilas)
FROM
   RDB$DATABASE

SELECT
   RDB$SET_CONTEXT('USER_TRANSACTION', 'Stop', 1)
FROM
   RDB$DATABASE

Notas:

  • El máximo número de variables en un solo contexto es de 1000
  • Todas las variables de USER_TRANSACTION sobrevivirán un ROLLBACK RETAIN y un ROLLBACK TO SAVEPOINT sin cambios, no importa en cual punto durante la transacción fueron puestas
  • La función RDB$SET_CONTEXT() puede ser llamada sin asignar su resultado a una variable

En síntesis, con RDB$SET_CONTEXT() podemos tener variables que sean globales, tanto a la conexión actual como a la transacción actual. Son el equivalente a las variables de tipo PUBLIC que tienen algunos lenguajes de programación (es decir, variables que pueden ser accedidas desde cualquier módulo: programa, función, rutina o clase).

Artículo relacionado:

https://firebird21.wordpress.com/2013/04/13/rdbget_context/