Función SUBSTRING - AWS Clean Rooms

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Función SUBSTRING

Devuelve el subconjunto de una cadena basado en la posición inicial especificada.

Si la entrada es una cadena de caracteres, la posición inicial y el número de caracteres extraídos se basan en caracteres, y no en bytes, de modo tal que los caracteres de varios bytes se cuentan como si fueran simples. Si la entrada es una expresión binaria, la posición inicial y la subcadena extraída se basan en bytes. No puede especificar una longitud negativa, pero puede especificar una posición de inicio negativa.

Sintaxis

SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
SUBSTRING(character_string, start_position, number_characters )
SUBSTRING(binary_expression, start_byte, number_bytes )
SUBSTRING(binary_expression, start_byte )

Argumentos

character_string

La cadena que se buscará. Los tipos de datos que no son caracteres se tratan como una cadena.

start_position

La posición dentro de la cadena para comenzar la extracción, comenzando en 1. En valor de start_position (posición_de_inicio) se basa en la cantidad de caracteres, no bytes, por lo que los caracteres multibyte se cuentan como caracteres simples. Este número puede ser negativo.

number_characters

La cantidad de caracteres para extraer (la longitud de la subcadena). El valor de number_characters (número_de_caracteres) se basa en la cantidad de caracteres, no bytes, por lo que los caracteres multibyte se cuentan como caracteres simples. Este número no puede ser negativo.

start_byte

La posición dentro de la expresión binaria desde donde comienza la extracción, con punto de partida en 1. Este número puede ser negativo.

number_bytes

La cantidad de bytes para extraer, es decir, la longitud de la subcadena. Este número no puede ser negativo.

Tipo de retorno

VARCHAR

Notas de uso de cadenas de caracteres

El siguiente ejemplo devuelve una cadena de cuatro caracteres comenzando con el sexto carácter.

select substring('caterpillar',6,4); substring ----------- pill (1 row)

Si start_position + number_characters supera la longitud de la cadena, SUBSTRING devuelve una subcadena que comienza en start_position y llega hasta el final de la cadena. Por ejemplo:

select substring('caterpillar',6,8); substring ----------- pillar (1 row)

Si start_position es negativo o 0, la función SUBSTRING devuelve una cadena que comienza en el primer carácter de la cadena con una longitud de start_position + number_characters -1. Por ejemplo:

select substring('caterpillar',-2,6); substring ----------- cat (1 row)

Si start_position + number_characters -1 es menor o igual a cero, SUBSTRING devuelve una cadena vacía. Por ejemplo:

select substring('caterpillar',-5,4); substring ----------- (1 row)

Ejemplos

El siguiente ejemplo devuelve el mes de la cadena LISTTIME en la tabla LISTING:

select listid, listtime, substring(listtime, 6, 2) as month from listing order by 1, 2, 3 limit 10; listid | listtime | month --------+---------------------+------- 1 | 2008-01-24 06:43:29 | 01 2 | 2008-03-05 12:25:29 | 03 3 | 2008-11-01 07:35:33 | 11 4 | 2008-05-24 01:18:37 | 05 5 | 2008-05-17 02:29:11 | 05 6 | 2008-08-15 02:08:13 | 08 7 | 2008-11-15 09:38:15 | 11 8 | 2008-11-09 05:07:30 | 11 9 | 2008-09-09 08:03:36 | 09 10 | 2008-06-17 09:44:54 | 06 (10 rows)

El siguiente ejemplo es igual al anterior, pero utiliza la opción FROM...FOR:

select listid, listtime, substring(listtime from 6 for 2) as month from listing order by 1, 2, 3 limit 10; listid | listtime | month --------+---------------------+------- 1 | 2008-01-24 06:43:29 | 01 2 | 2008-03-05 12:25:29 | 03 3 | 2008-11-01 07:35:33 | 11 4 | 2008-05-24 01:18:37 | 05 5 | 2008-05-17 02:29:11 | 05 6 | 2008-08-15 02:08:13 | 08 7 | 2008-11-15 09:38:15 | 11 8 | 2008-11-09 05:07:30 | 11 9 | 2008-09-09 08:03:36 | 09 10 | 2008-06-17 09:44:54 | 06 (10 rows)

No se puede utilizar SUBSTRING para extraer de forma predecible el prefijo de una cadena que pueda contener caracteres de varios bytes, ya que es necesario especificar la longitud de una cadena de varios bytes en función de la cantidad de bytes, y no de la cantidad de caracteres. Para extraer el segmento inicial de una cadena en función de la longitud en bytes, puede utilizar CAST y convertir la cadena en VARCHAR(byte_length) para truncarla, donde byte_length es la longitud requerida. En el siguiente ejemplo, se extraen los 5 primeros bytes de la cadena 'Fourscore and seven'.

select cast('Fourscore and seven' as varchar(5)); varchar ------- Fours

El ejemplo siguiente devuelve el nombre Ana que aparece después del último espacio de la cadena de entrada Silva, Ana.

select reverse(substring(reverse('Silva, Ana'), 1, position(' ' IN reverse('Silva, Ana')))) reverse ----------- Ana