Función escalar LEFT
La función LEFT devuelve la serie situada más a la izquierda de expresión-serie de la longitud longitud, expresada en la unidad de serie especificada.
El esquema es SYSIBM. La versión SYSFUN de la función LEFT continúa estando disponible.
- expresión-serie
- Una expresión que especifica la serie de la que se deriva el
resultado. La expresión debe devolver una serie incorporada, un valor numéricovalor booleano o valor de fecha y hora. Si el valor no es una serie, se convierte implícitamente a VARCHAR antes de que se evalúe la función. Una subserie de la serie consta de cero o más puntos de código contiguos de la serie.
La expresión-serie se rellena a la derecha con el número necesario de caracteres de relleno para que exista siempre la subserie especificada de expresión-serie. El carácter utilizado para el relleno es el mismo carácter que se utiliza para rellenar la serie en contextos donde se debe producir relleno. Para obtener más información acerca del relleno, consulte la sección
Asignaciones de series
enAsignaciones y comparaciones
. - longitud
Una expresión que especifica la longitud del resultado. La expresión debe devolver un valor que sea un tipo de datos incorporado numérico, 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. longitud debe ser superior o igual a 0 (SQLSTATE 22011). Si se especifica OCTETS y el resultado son datos gráficos, el valor debe ser un número par (SQLSTATE 428GC).
Si longitud no es una constante y no se especifica una unidad de serie, longitud debe ser menor que o igual al atributo de longitud de expresión-serie (SQLSTATE 22011).
Si longitud no es una constante y se especifica una unidad de serie, longitud debe ser menor que o igual al valor correspondiente de la tabla siguiente (SQLSTATE 22011):
Si longitud es una constante y el tipo de datos de expresión-serie es:Tabla 1. Valor máximo de longitud cuando longitud no es una constante y se especifica una unidad de serie Unidad de serie de expresión-serie Unidad de serie especificada Valor máximo de longitud L = atributo de longitud de expresión-serie
OCTETS OCTETS L OCTETS CODEUNITS16 L/2 OCTETS CODEUNITS32 L/4 CODEUNITS16 OCTETS L*2 CODEUNITS16 CODEUNITS16 L CODEUNITS16 CODEUNITS32 L/2 CODEUNITS32 OCTETS L*4 CODEUNITS32 CODEUNITS16 L*2 CODEUNITS32 CODEUNITS32 L - CHAR, VARCHAR, GRAPHIC o VARGRAPHIC
- La longitud debe ser menor que o igual a 32.672 OCTETS, 16.336 CODEUNITS16 o 8168 CODEUNITS32 (SQLSTATE 22011).
- CLOB o DBCLOB
- La longitud debe ser menor que o igual a 2.147.483.647 OCTETS, 1.073.741.823 CODEUNITS16 o 53,6870,911 CODEUNITS32 (SQLSTATE 22011).
- BLOB
- La longitud debe ser menor que o igual a 2.147.483.647 OCTETS (SQLSTATE 22011).
- CODEUNITS16, CODEUNITS32 u OCTETS
- Especifica la unidad de serie de longitud.
CODEUNITS16 especifica que longitud se expresa en unidades de código UTF-16 de 16 bits. CODEUNITS32 especifica que longitud se expresa en unidades de código UTF-32 de 32 bits. OCTETS especifica que longitud se expresa en bytes.
Si la unidad de serie se especifica como CODEUNITS16 o CODEUNITS32 y expresión-serie es una serie binaria o datos de bit, se devuelve un error (SQLSTATE 428GC). Si la unidad de serie se especifica como OCTETS y expresión-serie es una serie gráfica, longitud debe ser un número par; de lo contrario, se devuelve un error (SQLSTATE 428GC). Si una unidad de serie no se especifica de forma explícita, la unidad de serie de serie-expresión determina la unidad que se utiliza. Para obtener más información sobre CODEUNITS16, CODEUNITS32 y OCTETS, consulte el apartado
Unidades de serie en funciones incorporadas
enSeries de caracteres
.
Resultado
- VARCHAR si expresión-serie es CHAR o VARCHAR
- CLOB si expresión-serie es CLOB
- VARGRAPHIC si expresión-serie es GRAPHIC o VARGRAPHIC
- DBCLOB si expresión-serie es DBCLOB
- VARBINARY si expresión-serie es BINARY o VARBINARY
- BLOB si serie-expresión es BLOB
- Si longitud no es una constante, el atributo de longitud del resultado es el mismo que el atributo de longitud de expresión-serie.
- Si longitud es una constante y no se especifica una unidad de serie, el atributo de longitud del resultado es el máximo de longitud y el atributo de longitud de expresión-serie.
- Si longitud es una constante y se especifica una unidad de serie,
el atributo de longitud del resultado se muestra en la Tabla 2:
Tabla 2. Atributo de longitud de resultado cuando longitud es una constante y se especifica una unidad de serie Unidad de serie de expresión-serie Unidad de serie especificada Valor máximo de longitud L = atributo de longitud de expresión-serie
OCTETS OCTETS max(L, longitud) OCTETS CODEUNITS16 max(L, longitud * 2) OCTETS CODEUNITS32 max(L, longitud * 4) CODEUNITS16 OCTETS max(L, longitud / 2) CODEUNITS16 CODEUNITS16 max(L, longitud) CODEUNITS16 CODEUNITS32 max(L, longitud * 2) CODEUNITS32 OCTETS max(L, longitud / 4) CODEUNITS32 CODEUNITS16 max(L, longitud / 2) CODEUNITS32 CODEUNITS32 max(L, longitud)
Si cualquiera de los argumentos puede ser nulo, el resultado puede ser nulo; si alguno de los argumentos es nulo, el resultado es el valor NULL.
Ejemplos
- Ejemplo 1: Supongamos que la variable ALPHA tiene el valor
ABCDEF
. La siguiente sentencia:
devuelveSELECT LEFT(ALPHA,3) FROM SYSIBM.SYSDUMMY1ABC
, que son los tres caracteres situados más a la izquierda en ALPHA. - Ejemplo 2: supongamos que la variable NAME, que se define como VARCHAR(50), tiene el valor
KATIE AUSTIN
y que la variable de entero FIRSTNAME_LEN tiene el valor 5. La siguiente sentencia:
devuelve el valorSELECT LEFT(NAME,FIRSTNAME_LEN) FROM SYSIBM.SYSDUMMY1KATIE
. - Ejemplo 3: la sentencia siguiente devuelve una serie de longitud cero.
SELECT LEFT('ABCABC',0) FROM SYSIBM.SYSDUMMY1 - Ejemplo 4: la columna FIRSTNME de la tabla EMPLOYEE se define como
VARCHAR(12). Busque el nombre de un empleado cuyo apellido es
BROWN
y devuelva el nombre en una serie de 10 bytes.
devuelve una serie VARCHAR(12) que tiene el valorSELECT LEFT(FIRSTNME, 10) FROM EMPLOYEE WHERE LASTNAME = 'BROWN'DAVID
seguido de cinco caracteres en blanco. - Ejemplo 5: en una base de datos Unicode, FIRSTNAME es una columna VARCHAR(12). Uno de sus valores es la serie de 6 caracteres
Jürgen
. Cuanto FIRSTNAME tiene este valor:Función... Devuelve... LEFT(FIRSTNAME,2,CODEUNITS32) 'Jü' -- x'4AC3BC' LEFT(FIRSTNAME,2,CODEUNITS16) 'Jü' -- x'4AC3BC' LEFT(FIRSTNAME,2,OCTETS) 'J' -- x'4A20', una serie truncada - Ejemplo 6: El ejemplo siguiente funciona con la serie
Unicode
&N~AB
, donde&
el carácter de clave G de símbolo musical y~
el carácter de tilde de combinación. En el ejemplo siguiente se muestra esta serie en distintos formatos de codificación Unicode:&
N
~
A
B
UTF-8 X'F09D849E' X'4E' X'CC83' X'41' X'42' UTF-16BE X'D834DD1E' X'004E' X'0303' X'0041' X'0042' Suponga que la variable UTF8_VAR, con un atributo de longitud de 20 bytes, contiene la representación UTF-8 de la serie.
devuelve los valoresSELECT LEFT(UTF8_VAR, 2, CODEUNITS16), LEFT(UTF8_VAR, 2, CODEUNITS32), LEFT(UTF8_VAR, 2, OCTETS) FROM SYSIBM.SYSDUMMY1&
,&N
ybb
, respectivamente, dondeb
representa el carácter en blanco.
devuelve los valoresSELECT LEFT(UTF8_VAR, 5, CODEUNITS16), LEFT(UTF8_VAR, 5, CODEUNITS32), LEFT(UTF8_VAR, 5, OCTETS) FROM SYSIBM.SYSDUMMY1&N~A
,&N~AB
y&N
, respectivamente.
devuelve los valoresSELECT LEFT(UTF8_VAR, 10, CODEUNITS16), LEFT(UTF8_VAR, 10, CODEUNITS32), LEFT(UTF8_VAR, 10, OCTETS) FROM SYSIBM.SYSDUMMY1&N~ABbbbb
,&N~ABbbbbb
y&N~ABb
, respectivamente, dondeb
representa el carácter en blanco.Suponga que la variable UTF16_VAR, con un atributo de longitud de 20 unidades de código, contiene la representación UTF-16BE de la serie.
devuelve los valoresSELECT LEFT(UTF16_VAR, 2, CODEUNITS16), LEFT(UTF16_VAR, 2, CODEUNITS32), HEX (LEFT(UTF16_VAR, 2, OCTETS)) FROM SYSIBM.SYSDUMMY1&
,&N
, y X'D834', respectivamente, donde X'D834' es un carácter de sustitución no coincidente.
devuelve los valoresSELECT LEFT(UTF16_VAR, 5, CODEUNITS16), LEFT(UTF16_VAR, 5, CODEUNITS32), LEFT(UTF16_VAR, 6, OCTETS) FROM SYSIBM.SYSDUMMY1&N~A
,&N~AB
y&N
, respectivamente.
devuelve los valoresSELECT LEFT(UTF16_VAR, 10, CODEUNITS16), LEFT(UTF16_VAR, 10, CODEUNITS32), LEFT(UTF16_VAR, 10, OCTETS) FROM SYSIBM.SYSDUMMY1&N~ABbbbb
,&N~ABbbbbb
y&N~A
, respectivamente, dondeb
representa el carácter en blanco.
