SUBSTRINGfunzione - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

SUBSTRINGfunzione

Restituisce il sottoinsieme di una stringa basata su una posizione iniziale specificata.

Se l'input è una stringa di carattere, la posizione iniziale e il numero di caratteri estratti si basano sui caratteri, non di byte, pertanto i caratteri multibyte vengono contati come caratteri singoli. Se l'input è un'espressione binaria, la posizione iniziale e la sottostringa estratta sono basate su byte. Non è possibile specificare una lunghezza negativa, ma è possibile specificare una posizione di partenza negativa.

Sintassi

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 )

Argomenti

character_string

La stringa da cercare. I tipi di dati non carattere sono trattati come una stringa.

start_position

La posizione all'interno della stringa per iniziare l'estrazione, a partire da 1. La start_position si basa sul numero di caratteri, non di byte, pertanto i caratteri multibyte vengono contati come caratteri singoli. Questo numero può essere negativo.

number_characters

Il numero di caratteri da estrarre (la lunghezza della sottostringa). Il number_characters si basa sul numero di caratteri, non di byte, pertanto i caratteri multibyte vengono contati come caratteri singoli. Questo numero non può essere negativo.

binary_expression

La binary_expression del tipo di dati VARBYTE da cercare.

start_byte

La posizione all'interno dell'espressione binaria per iniziare l'estrazione, a partire da 1. Questo numero può essere negativo.

number_byte

Il numero di byte da estrarre, ovvero, la lunghezza della sottostringa. Questo numero non può essere negativo.

Tipo restituito

VARCHARo in VARBYTE base all'input.

Note per l'utilizzo

Di seguito sono riportati alcuni esempi di come è possibile utilizzare start_position e number_characters per estrarre sottostringhe da varie posizioni in una stringa.

L'esempio seguente restituisce una stringa di quattro caratteri che inizia con il sesto carattere.

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

Se start_position + number_characters supera la lunghezza della stringa, SUBSTRING restituisce una sottostringa a partire da start_position fino alla fine della stringa. Per esempio:

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

Se start_position è negativo o 0, la SUBSTRING funzione restituisce una sottostringa che inizia dal primo carattere della stringa con una lunghezza di + -1. start_position number_characters Per esempio:

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

Se start_position + number_characters -1 è minore o uguale a zero, SUBSTRING restituisce una stringa vuota. Per esempio:

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

Esempi

L'esempio seguente restituisce il mese dalla LISTTIME stringa nella LISTING tabella:

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)

L'esempio seguente è lo stesso di cui sopra, ma utilizza ilFROM... FORopzione:

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)

Non è possibile estrarre in modo prevedibile il prefisso di una stringa che potrebbe contenere caratteri multibyte perché è necessario specificare la lunghezza di una stringa multibyte in base al numero di byte, non al numero di caratteri. SUBSTRING Per estrarre il segmento iniziale di una stringa in base alla lunghezza in byte, puoi utilizzare la stringa as VARCHAR (byte_length) per CAST troncare la stringa, dove byte_length è la lunghezza richiesta. L'esempio seguente estrae i primi 5 byte dalla stringa 'Fourscore and seven'.

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

L'esempio seguente mostra una posizione iniziale negativa di un valore binario abc. Poiché la posizione iniziale è -3, la sottostringa viene estratta dall'inizio del valore binario. Il risultato viene visualizzato automaticamente come rappresentazione esadecimale della sottostringa binaria.

select substring('abc'::varbyte, -3); substring ----------- 616263

L'esempio seguente mostra un valore 1 per la posizione iniziale di un valore binario abc. Poiché non è specificata la lunghezza, la stringa viene estratta dalla posizione iniziale alla fine della stringa. Il risultato viene visualizzato automaticamente come rappresentazione esadecimale della sottostringa binaria.

select substring('abc'::varbyte, 1); substring ----------- 616263

L'esempio seguente mostra un 3 per la posizione iniziale di un valore binario abc. Poiché non è specificata la lunghezza, la stringa viene estratta dalla posizione iniziale alla fine della stringa. Il risultato viene visualizzato automaticamente come rappresentazione esadecimale della sottostringa binaria.

select substring('abc'::varbyte, 3); substring ----------- 63

L'esempio seguente mostra un 2 per la posizione iniziale di un valore binario abc. La stringa viene estratta dalla posizione iniziale alla posizione 10, ma la fine della stringa si trova nella posizione 3. Il risultato viene visualizzato automaticamente come rappresentazione esadecimale della sottostringa binaria.

select substring('abc'::varbyte, 2, 10); substring ----------- 6263

L'esempio seguente mostra un 2 per la posizione iniziale di un valore binario abc. La stringa viene estratta dalla posizione iniziale per 1 byte. Il risultato viene visualizzato automaticamente come rappresentazione esadecimale della sottostringa binaria.

select substring('abc'::varbyte, 2, 1); substring ----------- 62

L'esempio seguente restituisce il nome Ana che appare dopo l'ultimo spazio nella stringa di input Silva, Ana.

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