カテゴリ:

文字列とバイナリ関数 (マッチング/比較)

LEFT

入力の左端のサブ文字列を返します。

LEFT(STR, N) は、 SUBSTR(STR, 1, N) と同等です。

こちらもご覧ください:

RIGHTSUBSTR , SUBSTRING

構文

LEFT( <string_expr> , <length_expr> )
Copy

引数

string_expr

VARCHAR または BINARY 値に評価される式。

length_expr

整数に評価される式。次を指定します。

  • 入力が VARCHAR 値の場合に返す UTF-8文字の数。

  • 入力が BINARY 値の場合に返すバイト数。

0以上の長さを指定します。長さが負の数の場合、関数は空の文字列を返します。

戻り値

返される値のデータ型は、 string_expr (VARCHAR または BINARY)のデータ型と同じです。

入力のいずれかが NULLの場合、 NULLが返されます。

使用上の注意

length_exprexpr の長さを超えている場合、関数は 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. これは、戻り値がネストされた関数呼び出しの一部として別の関数に渡される場合に役立ちます。

以下の例では、 LEFT 関数を使用しています。

基本的な例

SELECT LEFT('ABCDEF', 3);
Copy
+-------------------+
| LEFT('ABCDEF', 3) |
|-------------------|
| ABC               |
+-------------------+

メール、電話、日付文字列の部分文字列を返す

以下の例は、テーブル内の顧客情報の部分文字列を返します。

テーブルを作成してデータを挿入します。

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;
Copy
+---------+---------------------------------+--------------+-----------------+
| 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        |
+---------+---------------------------------+--------------+-----------------+

メールアドレスからユーザー名を抽出するには、 POSITION 関数と LEFT 関数を使用します。この例では、各文字列の @ の位置を見つけ、1を引いてユーザー名を返します。

SELECT cust_id,
       cust_email,
       LEFT(cust_email, POSITION('@' IN cust_email) - 1) AS username
  FROM customer_contact_example;
Copy
+---------+---------------------------------+---------------------+
| CUST_ID | CUST_EMAIL                      | USERNAME            |
|---------+---------------------------------+---------------------|
|       1 | some_text@example.com           | some_text           |
|       2 | some_other_text@example.org     | some_other_text     |
|       3 | some_different_text@example.net | some_different_text |
+---------+---------------------------------+---------------------+

Tip

POSITION 関数を使用すると、空文字(' ')やアンダースコア(_)など、他の文字の位置を見つけることができます。

テーブルの cust_phone 列では、市外局番は常に最初の3文字です。電話番号から市外局番を抽出します。

SELECT cust_id,
       cust_phone,
       LEFT(cust_phone, 3) AS area_code
  FROM customer_contact_example;
Copy
+---------+--------------+-----------+
| CUST_ID | CUST_PHONE   | AREA_CODE |
|---------+--------------+-----------|
|       1 | 800-555-0100 | 800       |
|       2 | 800-555-0101 | 800       |
|       3 | 800-555-0102 | 800       |
+---------+--------------+-----------+

テーブルの activation_date 列では、日付は常に YYYYMMDD の形式です。これらの文字列から年を抽出します。

SELECT cust_id,
       activation_date,
       LEFT(activation_date, 4) AS year
  FROM customer_contact_example;
Copy
+---------+-----------------+------+
| CUST_ID | ACTIVATION_DATE | YEAR |
|---------+-----------------+------|
|       1 | 20210320        | 2021 |
|       2 | 20240509        | 2024 |
|       3 | 20191017        | 2019 |
+---------+-----------------+------+