- カテゴリ:
文字列とバイナリ関数 (マッチング/比較)
RIGHT¶
入力の右端のサブ文字列を返します。
RIGHT(STR, N)
は、 SUBSTR(STR, LENGTH(STR)-N+1, N)
と同等です。
- こちらもご参照ください:
構文¶
RIGHT( <string_expr> , <length_expr> )
引数¶
string_expr
VARCHAR または BINARY 値に評価される式。
length_expr
整数に評価される式。次を指定します。
入力が VARCHAR 値の場合に返す UTF-8文字の数。
入力が BINARY 値の場合に返すバイト数。
0以上の長さを指定します。長さが負の数の場合、関数は空の文字列を返します。
戻り値¶
返される値のデータ型は、 string_expr
(VARCHAR または BINARY)のデータ型と同じです。
入力のいずれかが NULLの場合、 NULLが返されます。
使用上の注意¶
length_expr
が expr
の長さを超えている場合、関数は expr
を返します。
照合順序の詳細¶
照合は VARCHAR 入力に適用されます。最初のパラメーターの入力データ型が BINARY の場合、照合は適用されません。
No impact. 照合順序は構文的に受け入れられますが、照合順序は処理には影響しません。例えば、2文字や3文字の文字(ハンガリー語の「dzs」やチェコ語の「ch」など)は、長さの引数では(1文字ではなく)2文字や3文字としてカウントされます。
The collation of the result is the same as the collation of the input. これは、戻り値がネストされた関数呼び出しの一部として別の関数に渡される場合に役立ちます。
例¶
以下の例では、 RIGHT 関数を使用しています。
基本的な例¶
SELECT RIGHT('ABCDEFG', 3);
+---------------------+
| RIGHT('ABCDEFG', 3) |
|---------------------|
| EFG |
+---------------------+
メール、電話、日付文字列の部分文字列を返す¶
以下の例は、テーブル内の顧客情報の部分文字列を返します。
テーブルを作成してデータを挿入します。
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 |
+---------+---------------------------------+--------------+-----------------+
メールアドレスからドメインを抽出するには、 RIGHT 関数とともに LENGTH 関数と POSITION 関数を使用します。この例では、まず入力文字列の長さを見つけ、次に各文字列の @
の位置を差し引いて、ドメインの長さを決定します。
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 |
+---------+---------------------------------+-------------+
Tip
POSITION 関数を使用すると、空文字(' '
)やアンダースコア(_
)など、他の文字の位置を見つけることができます。
テーブルの cust_phone
列では、市外局番は常に最初の3文字です。市外局番を除いた電話番号を抽出します。
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 |
+---------+--------------+-------------------------+
テーブルの activation_date
列では、日付は常に YYYYMMDD
の形式です。これらの文字列から日を抽出します。
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 |
+---------+-----------------+-----+