SIMILARPER - 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à.

SIMILARPER

L'operatore SIMILAR TO abbina un'espressione stringa, ad esempio il nome di una colonna, a un modello di espressione regolare SQL standard. Un modello di espressione SQL regolare può includere un insieme di metacaratteri che corrispondono ai modelli, inclusi i due supportati dall'operatore. LIKE

L'operatore SIMILAR TO restituisce true solo se il suo pattern corrisponde all'intera stringa, a differenza del comportamento delle espressioni POSIX regolari, in cui il pattern può corrispondere a qualsiasi parte della stringa.

SIMILARTO esegue una corrispondenza con distinzione tra maiuscole e minuscole.

Nota

La corrispondenza delle espressioni regolari tramite SIMILAR TO è costosa dal punto di vista computazionale. Si consiglia di LIKE utilizzarlo quando possibile, specialmente quando si elabora un numero molto elevato di righe. Ad esempio, le seguenti query sono identiche dal punto di vista funzionale, ma la query che utilizza LIKE viene eseguita molte volte più velocemente della query che utilizza un'espressione regolare:

select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

Sintassi

expression [ NOT ] SIMILAR TO pattern [ ESCAPE 'escape_char' ]

Argomenti

espressione

Un'espressione valida di UTF -8 caratteri, ad esempio un nome di colonna.

SIMILARPER

SIMILARTO esegue una corrispondenza del modello con distinzione tra maiuscole e minuscole per l'intera stringa nell'espressione.

pattern

Un'espressione valida di UTF -8 caratteri che rappresenta un SQL modello di espressione regolare standard.

escape_char

Un'espressione di caratteri che eseguirà l'escape dei metacaratteri nel modello. Per impostazione predefinita sono due barre rovesciate ("\\").

Se il modello non contiene metacaratteri, allora il modello rappresenta solo la stringa stessa.

Entrambe le espressioni dei caratteri possono essere CHAR di due tipi di VARCHAR dati. Se differiscono, Amazon Redshift converte il modello al tipo di dati dell'espressione.

SIMILARTO supporta i seguenti metacaratteri che corrispondono ai modelli:

Operatore Descrizione
% Abbina qualsiasi sequenza di zero o più caratteri.
_ Abbina qualsiasi carattere singolo.
| Denota alternanza (una di due alternative).
* Ripeti la voce precedente zero o più volte.
+ Ripeti la voce precedente una o più volte.
? Ripeti la voce precedente zero o una volta.
{m} Ripetere la voce precedente esattamente m volte.
{m,} Ripetere la voce precedente m o più volte.
{m,n} Ripetere la voce precedente almeno m volte e non più di n volte.
() Raggruppa tra parentesi voci di gruppo in una singola voce logica.
[...] Un'espressione tra parentesi specifica una classe di caratteri, proprio come nelle espressioni regolari. POSIX

Esempi

La tabella seguente mostra esempi di pattern matching utilizzando SIMILAR TO:

Expression Valori restituiti
'abc' SIMILAR TO 'abc' True
'abc' SIMILAR TO '_b_' True
'abc' SIMILAR TO '_A_' False
'abc' SIMILAR TO '%(b|d)%' True
'abc' SIMILAR TO '(b|c)%' False
'AbcAbcdefgefg12efgefg12' SIMILAR TO '((Ab)?c)+d((efg)+(12))+' True
'aaaaaab11111xy' SIMILAR TO 'a{6}_ [0-9]{5}(x|y){2}' True
'$0.87' SIMILAR TO '$[0-9]+(.[0-9][0-9])?' True

L'esempio seguente trova tutte le città il cui nome contiene "E" o "H":

SELECT DISTINCT city FROM users WHERE city SIMILAR TO '%E%|%H%' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights

Nell'esempio seguente viene usata la stringa di escape predefinita ("\\") per cercare stringhe che contengono "_":

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start\\_%' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy

L'esempio seguente specifica "^" come stringa di escape, quindi usa la stringa di escape per cercare stringhe che contengono "_":

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start^_%' ESCAPE '^' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy