Función escalar SUBSTRB

La función SUBSTRB devuelve una subserie de una serie, empezando desde una posición especificada de la serie. Las longitudes se calculan en bytes.

Read syntax diagramSkip visual syntax diagramSUBSTRB(string, start,length)

El esquema es SYSIBM.

La función SUBSTRB está disponible a partir de la versión 9.7, Fixpack 1.

serie
Una expresión que especifica la serie de la que se deriva el resultado.

La expresión debe devolver un valor que sea una serie de caracteres incorporada, un valor numérico, un valor booleanoo un valor de fecha y hora. Si el valor no es una serie de caracteres, se convierte implícitamente a VARCHAR antes de evaluar la función. En una base de datos Unicode, si el valor es un tipo de datos de gráficos, éste se convierte implícitamente en un tipo de datos de serie de caracteres antes de evaluar la función. Cualquier número de bytes contiguos, cero o más, constituyen una subserie de esta expresión.

inicio
Expresión que especifica la posición inicial en la serie del inicio de la subserie resultante. La expresión debe devolver un valor que sea un tipo de datos numérico incorporado, CHAR, VARCHAR, GRAPHIC o VARGRAPHIC. Si el valor no es del tipo INTEGER, se convierte de forma implícita en INTEGER antes de evaluar la función.

Si el inicio es positivo, la posición inicial se calcula a partir del inicio de la serie. Si el inicio es mayor que la longitud de la serie, se devuelve una serie de longitud cero.

Si el inicio es negativo, la posición inicial se calcula a partir del final de la serie, y contando en sentido inverso. Si el valor absoluto de la serie es mayor que la longitud de la serie, se devuelve una serie de longitud cero.

Si el inicio es 0, se utiliza la posición inicial 1.

Longitud
Expresión que especifica la longitud del resultado en bytes. Si se especifica, la expresión debe devolver un valor que sea un tipo de datos numérico incorporado, CHAR, VARCHAR, GRAPHIC o VARGRAPHIC. Si el valor no es del tipo INTEGER, se convierte de forma implícita en INTEGER antes de evaluar la función.
Si la longitud es:
  • Mayor que el número de bytes desde la posición inicial hasta el final de la serie, la longitud resultante es la longitud del primer argumento menos la posición inicial más uno.
  • Menor que o igual a cero, el resultado de SUBSTRB es una serie de longitud cero.

El valor por omisión de la longitud es el número de bytes desde la posición que especifica inicio hasta el último byte de la serie.

Result

Si la serie es un tipo de datos CHAR o VARCHAR, el resultado de la función es un tipo de datos VARCHAR. Si la serie es un CLOB, el resultado de la función es un CLOB. Si la serie es un tipo de datos BINARY o VARBINARY, el resultado de la función es un tipo de datos VARBINARY. Si la serie es un BLOB, el resultado de la función es un BLOB. Si el primer argumento es una variable del lenguaje principal que no es una serie binaria y no es una serie de caracteres FOR BIT DATA, la página de códigos del resultado es la página de códigos de la sección; de lo contrario, es la página de códigos del primer argumento.

El atributo de longitud del resultado es igual al atributo de longitud del primer argumento a menos que los argumentos inicio y longitud, ambos, se hayan especificado y definido como constantes. En este caso, el atributo de longitud del resultado se determina de la forma siguiente:
  • Si la longitud es una constante menor que o igual a cero, el atributo de longitud del resultado es cero.
  • Si el inicio no es una constante, pero la longitud sí es una constante, el atributo de longitud del resultado es el mínimo entre el atributo de longitud del primer argumento y la longitud.
  • Si el inicio es una constante, pero la longitud no es una constante o no se ha especificado, el atributo de longitud del resultado es el atributo de longitud del primer argumento menos la posición inicial más uno.
  • Si el inicio y la longitud son constantes, el atributo de longitud del resultado es el menor entre los valores siguientes:
    • Longitud
    • El atributo de longitud del primer argumento menos la posición inicial más uno

Si algún argumento de la función SUBSTRB puede ser nulo, el resultado puede ser nulo; si algún argumento es nulo, el resultado es el valor nulo.

Notas

  • En SQL dinámico, la serie, el inicio y la longitud pueden representarse mediante un marcador de parámetro. Si se utiliza un marcador de parámetro para la serie, el tipo de datos del operando será VARCHAR y el operando podrá contener nulos.
  • Aunque no se indica explícitamente en las definiciones de resultados mencionadas anteriormente, la semántica implica que si la serie es una serie de caracteres que combina caracteres de un sólo byte y caracteres de varios bytes, el resultado podría contener fragmentos de caracteres de varios bytes, en función de los valores de inicio y longitud. Por ejemplo, el resultado podría empezar con el segundo byte de un carácter de varios bytes o bien finalizar con el primer byte de un carácter de varios bytes. La función SUBSTRB detectará estos caracteres parciales y sustituirá cada byte de un carácter incompleto por un único carácter en blanco.
  • SUBSTRB es similar a la función SUBSTR existente, con las excepciones que se indican a continuación:
    • SUBSTRB da soporte a un valor de inicio negativo, que indica que el proceso debe iniciarse desde el final de la serie.
    • SUBSTRB permite que la longitud sea mayor que la longitud resultante calculada. En este caso, se devolverá una serie más corta, en lugar de devolverse un error.
    • Los datos de entrada de gráficos no reciben soporte de forma nativa para el primer argumento de SUBSTRB. En una base de datos Unicode, los datos gráficos reciben soporte, pero primero se convierten en datos de caracteres, antes de evaluarse la función, y las longitudes se calculan en bytes.
    • El tipo de datos resultante de SUBSTRB es VARCHAR si el tipo de datos de entrada es CHAR.
    • El atributo de longitud del resultado para SUBSTRB es igual al atributo de longitud del primer argumento o bien se obtiene en función de los atributos de inicio o longitud, si cualquiera de éstos son constantes.

ejemplos

  • Ejemplo 1: supongamos que la variable del lenguaje principal NAME (VARCHAR(50)) tiene un valor de 'BLUE JAY' y la variable del lenguaje principal SURNAME_POS (INTEGER) tiene un valor de 6.
       SUBSTRB(:NAME, :SURNAME_POS)
    Devuelve el valor 'JAY'.
       SUBSTRB(:NAME, :SURNAME_POS,1)
    Devuelve el valor 'J'.
  • Ejemplo 2: seleccionar todas las filas de la tabla PROJECT que acaban en 'ING'.
       SELECT * FROM PROJECT
          WHERE SUBSTRB(PROJNAME,-3) = 'ING'