【Snowflake】Snowflake ~ 文字列操作関連 ~

■ はじめに

Snowflake の 文字列操作関連 の関数を少しづつ書いていく。

目次

【1】RPAD / LPAD
【2】SUBSTR / SUBSTRING
【3】LEN / LENGTH
【4】REPLACE
【5】CHARINDEX
【6】SPLIT_PART
【7】POSITION
【8】CONCAT / CONCAT_WS

【1】RPAD / LPAD

* RPAD = Right PADding? / Left PADding
* 右側・左側の文字列を埋める処理

https://docs.snowflake.com/ja/sql-reference/functions/rpad.html
https://docs.snowflake.com/ja/sql-reference/functions/lpad.html

構文

RPAD(<base>, <length_expr> [, <pad>])

<base>:操作対象文字列
<length_expr>:文字数/バイト数
<pad>:pad を左にパディング

-- 例1
select rpad('12345', 3, '*') from dual;
-- 出力結果:「123」 <= 3文字目以降は表示されない

-- 例2
select rpad('12345', 10, '*') from dual;
-- 出力結果:「12345*****」 <= 5文字目以降~10文字目まで「*」で埋める

【2】SUBSTR / SUBSTRING:

* 文字列の切り出し

https://docs.snowflake.com/ja/sql-reference/functions/substr.html

構文

SUBSTRING( <base_expr>, <start_expr> [ , <length_expr> ] )

<base_expr> : 対象文字列
<start_expr> : (開始位置は0ベースではなく、1ベース)
<length_expr> : <start_expr>から何文字目まで出すかを指定

-- 1 2 3
select substr('testing 1 2 3', 9, 5) from dual;

-- 01-2345-
select SUBSTRING('01-2345-6789', 1, 8) from dual;

【3】LEN / LENGTH

* 文字列数

https://docs.snowflake.com/ja/sql-reference/functions/length.html

-- 5
select len('hello') from dual;

-- 12
select length('01-2345-6789') from dual;

【4】REPLACE

* 文字列の置き換え

https://docs.snowflake.com/ja/sql-reference/functions/replace.html

【5】CHARINDEX

* 文字列中にある特定の文字のIndex(何番目)を返してくれる

https://docs.snowflake.com/ja/sql-reference/functions/charindex.html

-- 10
select charindex('@', 'test-test@gmail.com')

【6】SPLIT_PART

* 指定された文字列を分割し、リクエストされた部分を返す。
* パラメーターが NULL の場合、 NULL が返す

https://docs.snowflake.com/ja/sql-reference/functions/split_part.html

* 実際の使用例は、以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2022/10/28/000925

構文

SPLIT_PART(<string>, <delimiter>, <partNumber>)
-- <string> : 対象テキスト
-- <delimiter> : 分割する区切り文字('--'のような文字列もOK)
-- <partNumber> : 取得したいインデックス

select
  -- 127
  split_part('127.0.0.1', '.', 1),
  -- 1
  split_part('127.0.0.1', '.', -1)
;

SELECT
 'hello123@world.com' AS email,
 SPLIT_PART(email, '@', 1) AS local_part, -- hello123
 SPLIT_PART(email, '@', 2) AS domain_part -- world.com
;

【7】POSITION

* 2番目の引数で最初の引数が最初に出現する場所を検索し、
 成功した場合は、2番目の引数で最初の引数の位置(1ベース)を返す

https://docs.snowflake.com/ja/sql-reference/functions/position
構文

POSITION( <expr1>, <expr2> [ , <start_pos> ] )

POSITION( <expr1> IN <expr2> )

-- 「banana」で「an」の初出を見つけます。
select position('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
|                           2 |
+-----------------------------+

-- 字列でUnicode文字を含むさまざまな文字を検索します。
SELECT n, h, POSITION(n in h) FROM pos;

+--------+---------------------+------------------+
| N      | H                   | POSITION(N IN H) |
|--------+---------------------+------------------|
|        |                     |                1 |
|        | sth                 |                1 |
| 43     | 41424344            |                5 |
| a      | NULL                |             NULL |
| dog    | catalog             |                0 |
| log    | catalog             |                5 |
| lésine | le péché, la lésine |               14 |
| nicht  | Ich weiß nicht      |               10 |
| sth    |                     |                0 |
| ☃c     | ☃a☃b☃c☃d            |                5 |
| ☃☃     | bunch of ☃☃☃☃       |               10 |
| ❄c     | ❄a☃c❄c☃             |                5 |
| NULL   | a                   |             NULL |
| NULL   | NULL                |             NULL |
+--------+---------------------+------------------+

【8】CONCAT / CONCAT_WS

* 文字列結合の結合

1)CONCAT

* 文字列を結合する
* 「||」でも可能

* Concatenate (コンカットネイト) = 連結する

https://docs.snowflake.com/ja/sql-reference/functions/concat

2)CONCAT_WS

* 文字列を第一引数で結合する
 => 以下の例を見れば理解が早いと思う
* Concatenate With Separator = 区切り文字を使用した連結

https://docs.snowflake.com/ja/sql-reference/functions/concat_ws

SELECT CONCAT_WS(',', 'one', 'two', 'three');
+---------------------------------------+
| CONCAT_WS(',', 'ONE', 'TWO', 'THREE') |
|---------------------------------------|
| one,two,three                         |
+---------------------------------------+

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ Dynamic masking ~
https://dk521123.hatenablog.com/entry/2022/10/07/102337
Snowflake ~ Partition構成のデータを取り込む ~
https://dk521123.hatenablog.com/entry/2022/10/28/000925
SQL ~ 文字列操作関連 ~
https://dk521123.hatenablog.com/entry/2013/01/21/233512
Amazon Redshift ~ 文字列結合 ~
https://dk521123.hatenablog.com/entry/2021/09/09/093855
PostgreSQL】文字列関数 ~ string_agg ~
https://dk521123.hatenablog.com/entry/2021/08/21/000000
SQL正規表現関数 / REGEXP_XXX ~
https://dk521123.hatenablog.com/entry/2024/11/08/195101