■ はじめに
SQLでの文字列の扱いについてメモ。
目次
【1】文字列の取り出し 【2】文字列の長さ 【3】文字列の結合する 【4】文字列をパースする
【1】文字列の取り出し
以下の関数が使える 1)LEFT関数 2)RIGHT関数 3)SUBSTRING関数
サンプル
/* → 東京都 (左から3文字)*/ SELECT LEFT('東京都世田谷区',3); /* → 世田谷区 (右から4文字)*/ SELECT RIGHT('東京都世田谷区',4); /* → 金曜 (4文字目から2文字取得)*/ SELECT SUBSTRING('今日は金曜日', 4, 2);
【2】文字列の長さ
* LEN関数
1)サンプル
/* → 3 (半角)*/ SELECT LEN('123'); /* → 3 (行末の空白は無視)*/ SELECT LEN('123 '); /* → 3 (全角)*/ SELECT LEN('あいう');
2)使用例
* 一つの項目の中に複数の情報になっていた場合に分割するのに使う (例えば、【性別】【生年月日】。CODE = 'F20121011' や 'M20120211')
3)サンプル
-- 女性(Famale)のデータを取得 SELECT * FROM Person AS P WHERE LEFT(P.CODE, 1) = 'F'; SELECT * FROM Person AS P WHERE CONVERT(DATE, SUBSTRING(P.CODE, 2, LEN(P.CODE))) = CONVERT(DATE, '2012-10-11'))
【3】文字列の結合する
1)CONCAT
* 文字列を結合する * 「||」でも可能 * Concatenate (コンカットネイト) = 連結する
Amazon Redshift ~ 文字列結合 ~
https://dk521123.hatenablog.com/entry/2021/09/09/093855
2)CONCAT_WS
* 文字列を第一引数で結合する => 以下の例を見れば理解が早いと思う * Concatenate With Separator = 区切り文字を使用した連結
【4】文字列をパースする
* 「SPLIT_PART」を使う
Snowflake ~ 文字列操作関連 ~
https://dk521123.hatenablog.com/entry/2022/10/01/000000
【PostgreSQL】文字列関数 ~ split_part ~
https://dk521123.hatenablog.com/entry/2021/09/07/000000
1)サンプル
select 's3://your-buket/custom/2024/10/30/sample.csv' AS v, SPLIT_PART('s3://your-buket/custom/2024/10/30/sample.csv', '/', -4) AS year, -- 2024 SPLIT_PART('s3://your-buket/custom/2024/10/30/sample.csv', '/', -3) AS month, -- 10 SPLIT_PART('s3://your-buket/custom/2024/10/30/sample.csv', '/', -2) AS year, -- 30 SPLIT_PART('s3://your-buket/custom/2024/10/30/sample.csv', '/', -4) || SPLIT_PART('s3://your-buket/custom/2024/10/30/sample.csv', '/', -3) || SPLIT_PART('s3://your-buket/custom/2024/10/30/sample.csv', '/', -2) AS date -- 20241030 ;
参考文献
http://news.mynavi.jp/articles/2008/10/22/tsql/index.html
関連記事
Snowflake ~ 文字列操作関連 ~
https://dk521123.hatenablog.com/entry/2022/10/01/000000
Amazon Redshift ~ 文字列結合 ~
https://dk521123.hatenablog.com/entry/2021/09/09/093855
【PostgreSQL】文字列関数 ~ string_agg ~
https://dk521123.hatenablog.com/entry/2021/08/21/000000
【PostgreSQL】文字列関数 ~ split_part ~
https://dk521123.hatenablog.com/entry/2021/09/07/000000