■ はじめに
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