- Categorias:
Funções de cadeia de caracteres e binários (Correspondência/Comparação)
RIGHT¶
Retorna uma subcadeia de caracteres na extremidade direita de sua entrada.
RIGHT(STR, N)
é equivalente a SUBSTR(STR, LENGTH(STR)-N+1, N)
.
- Consulte também:
Sintaxe¶
RIGHT( <string_expr> , <length_expr> )
Argumentos¶
string_expr
Uma expressão que é avaliada como um valor VARCHAR ou BINARY.
length_expr
Uma expressão que é avaliada como um inteiro. Especifica:
O número de caracteres UTF-8 a serem retornados se a entrada for um valor VARCHAR.
O número de bytes a serem retornados se a entrada for um valor BINARY.
Especifique um comprimento maior ou igual a zero. Se o comprimento for um número negativo, a função retorna uma cadeia de caracteres vazia.
Retornos¶
O tipo de dados do valor retornado é o mesmo que o tipo de dados do string_expr
(VARCHAR ou BINARY).
Se qualquer uma das entradas for NULL, NULL será retornado.
Notas de uso¶
Se length_expr
for maior que o comprimento de expr
, então a função retorna expr
.
Detalhes do agrupamento¶
O agrupamento se aplica às entradas VARCHAR. O agrupamento não se aplica se o tipo de dados de entrada do primeiro parâmetro for BINARY.
No impact. Embora o agrupamento seja aceito sintaticamente, os agrupamentos não afetam o processamento. Por exemplo, letras de dois e três caracteres em idiomas (por exemplo, «dzs» em húngaro ou «ch» em tcheco) ainda são contadas como dois ou três caracteres (não um caractere) para o argumento de comprimento.
The collation of the result is the same as the collation of the input. Isso pode ser útil se o valor retornado for passado para outra função como parte de chamadas de funções aninhadas.
Exemplos¶
Os exemplos a seguir usam a função RIGHT.
Exemplo básico¶
SELECT RIGHT('ABCDEFG', 3);
+---------------------+
| RIGHT('ABCDEFG', 3) |
|---------------------|
| EFG |
+---------------------+
Como retornar substrings para cadeias de caracteres de e-mail, telefone e data¶
Os exemplos a seguir retornam substrings para informações do cliente em uma tabela.
Crie a tabela e insira os dados:
CREATE OR REPLACE TABLE customer_contact_example (
cust_id INT,
cust_email VARCHAR,
cust_phone VARCHAR,
activation_date VARCHAR)
AS SELECT
column1,
column2,
column3,
column4
FROM
VALUES
(1, 'some_text@example.com', '800-555-0100', '20210320'),
(2, 'some_other_text@example.org', '800-555-0101', '20240509'),
(3, 'some_different_text@example.net', '800-555-0102', '20191017');
SELECT * from customer_contact_example;
+---------+---------------------------------+--------------+-----------------+
| CUST_ID | CUST_EMAIL | CUST_PHONE | ACTIVATION_DATE |
|---------+---------------------------------+--------------+-----------------|
| 1 | some_text@example.com | 800-555-0100 | 20210320 |
| 2 | some_other_text@example.org | 800-555-0101 | 20240509 |
| 3 | some_different_text@example.net | 800-555-0102 | 20191017 |
+---------+---------------------------------+--------------+-----------------+
Use as funções LENGTH e POSITION com a função RIGHT para extrair os domínios dos endereços de e-mail. Este exemplo primeiro encontra o comprimento da cadeia de caracteres de entrada e então subtrai a posição de @
em cada cadeia de caracteres para determinar o comprimento do domínio:
SELECT cust_id,
cust_email,
RIGHT(cust_email, LENGTH(cust_email) - (POSITION('@' IN cust_email))) AS domain
FROM customer_contact_example;
+---------+---------------------------------+-------------+
| CUST_ID | CUST_EMAIL | DOMAIN |
|---------+---------------------------------+-------------|
| 1 | some_text@example.com | example.com |
| 2 | some_other_text@example.org | example.org |
| 3 | some_different_text@example.net | example.net |
+---------+---------------------------------+-------------+
Dica
É possível usar a função POSITION para encontrar a posição de outros caracteres, como um caractere vazio (' '
) ou um sublinhado (_
).
Na coluna cust_phone
da tabela, o código de área são sempre os três primeiros caracteres. Extraia os números de telefone sem os códigos de área:
SELECT cust_id,
cust_phone,
RIGHT(cust_phone, 8) AS phone_without_area_code
FROM customer_contact_example;
+---------+--------------+-------------------------+
| CUST_ID | CUST_PHONE | PHONE_WITHOUT_AREA_CODE |
|---------+--------------+-------------------------|
| 1 | 800-555-0100 | 555-0100 |
| 2 | 800-555-0101 | 555-0101 |
| 3 | 800-555-0102 | 555-0102 |
+---------+--------------+-------------------------+
Na coluna activation_date
da tabela, a data está sempre no formato YYYYMMDD
. Extraia o dia destas cadeias de caracteres:
SELECT cust_id,
activation_date,
RIGHT(activation_date, 2) AS day
FROM customer_contact_example;
+---------+-----------------+-----+
| CUST_ID | ACTIVATION_DATE | DAY |
|---------+-----------------+-----|
| 1 | 20210320 | 20 |
| 2 | 20240509 | 09 |
| 3 | 20191017 | 17 |
+---------+-----------------+-----+