0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Xplenty入門 Part3: Xplentyでよく行われる文字列操作

0
Last updated at Posted at 2021-03-16

このブログでは、Xplentyでよく行われる文字列などの変換処理について解説します。
※今後、新しいケースがあれば、こちらのブログに随時追加していく予定です。

よく行われる文字列操作

Q1. 氏名を姓(Last Name)と名(First Name)に分けるには?

STRSPLIT関数を使用することで、区切り文字を指定し、文字列を分割して取得することが可能です。
例:field1:田中 太郎
STRSPLIT(field1,' ').$0
==> 田中
STRSPLIT(field1,' ').$1
==> 太郎

Q2. 値がひらがなの場合のみ取得するには?

REGEX_EXTRACT関数を使用することで、正規表現を使用し、ひらがなおよび半角/全角スペースを含む文字列を取得することが可能です。
REGEX_EXTRACT(field1,'[ぁ-ん( | )]+',0)
例:field1:やまだ たろう
==> やまだ たろう
例:field1:山田 太郎
==> null

Q3. 住所を分けるには?

Xplentyでは完全に実現することは難しいですが、以下のような方法で番地部分を分けることが可能です。
Xplentyでは、正規表現を使用して条件にマッチした部分のみを取得することが可能です。

1. 都道府県部分を取得するには

REGEX_EXTRACT関数を使用し正規表現を使って、条件にマッチする部分を抽出します。
field1: 東京都港区六本木6-10-1
REGEX_EXTRACT(field1,'(..都|..府|..道|([\u4E00-\u9FFF]{2,3})*県)',0)
-> 東京都

2. 上記以外の部分を取得

INDEXOF関数で、条件にマッチする文字列の場所を判定することが可能です。
field1: 東京都港区六本木6-10-1
field10: 東京都
SUBSTRING(field1,INDEXOF(field1,field10)+Length(field10),Length(field3))
->港区六本木6-10-1

Q4. Replace関数

1. 通常文字列の置換

例)field1: '埼玉県埼玉市'
REPLACE(field1,'埼玉市','さいたま市')
-> 埼玉県さいたま市

2. 一部の文字を除外する

文字列に含まれる「?」などの特殊な文字を置換する場合はエスケープ文字を利用する
?を除外したい場合は\\?とする
例)field1: '2022/?01/01'
REPLACE(field1,'\\?','')
-> '2022/01/01'

3. 改行コードの置換

Webアプリケーションデータなどに含まれる改行コードをDBに保存する際に改行コードとして保存するには?
例)field1='あああああああああああああ<BR>いいいいいいいいいいいいいいい'
<BR>部分をReplace関数を使用して、DBで設定されている文字コードに合わせて正しい改行コードに置換ください。
REPLACE(field名,'<BR>','\r\n')

Q5. 半角カタカナを検知する

CASE WHEN field1 MATCHES '.*[ヲ-゚].*' THEN 'Y' ELSE 'N' END

  • field1の値が「あああアアあ」 の場合 > Y
  • field1の値が 「ああああアあ」 の場合 > N

Q6. NULLの置換について

COALESCE関数もしくはCase文で可能です。

  • Case文の例:CASE WHEN field1 is null then 'なし' ELSE field1 END

  • COALESCE関数の例:COALESCE(field1, 'なし')
    field1がNULLだった場合のみ2つ目の引数にセットされた値もしくは列(上記の例だと「なし」)がセットされる

JSONの文字列操作

Q1. JSONのBAG型データからネスト化された値を取得するには?

以下のような[]で複数の値をもつBAG型のデータをXplentyで扱う方法について紹介します。

[
        {
            "key": "first_name",
            "value": "Taro",
            "label": "FIRST NAME"
        },
       {
            "key": "last_name",
            "value": "Yamada",
            "label": "LAST NAME"
        },
        {
            "key": "gender",
            "value": "Male",
            "label": "GENDER",
            "is_required": "required",
            "datatype": "text"
        }
    ]

BAG型のデータから必要な値だけを抽出する
ネスト化された値からパスを指定して取得するには、JsonExtractScalar関数を使用すると便利です。

FIRST NAMEを取得:JsonExtractScalar(field名,'$.[0].value’) > Taro
LAST NAMEを取得:JsonExtractScalar(field名,'$.[1].value’) > Yamada
GENDERを取得:JsonExtractScalar(field名,'$.[1].value’) > Male

今回のブログでは、Xplentyで固定長のフィールドを扱う必要がある場合のTipsについて紹介します。

固定長の文字列をフィールドごとに分割するには?

Selectコンポーネントで以下のように設定可能です。
式:Substring(フィールド,開始位置,終了位置)
使用例:
SUBSTRING('aaaaa00000あああああ11111',0,5) > 'aaaaa'
SUBSTRING('aaaaa00000あああああ11111',5,10) > '00000'
SUBSTRING('aaaaa00000あああああ11111',10,15) > 'あああああ'

固定長の文字列を生成するには?

Selectコンポーネントで以下のように設定可能です。
式:SPRINTF('%08d',数値)
使用例:

結果 説明
SPRINTF('%08d',1) '00000001' 8桁 (左を桁数分0で詰める)
SPRINTF('%05d',10) '00010' 5桁 (左を桁数分0で詰める)
SPRINTF('%5s','あ') '____あ' 5桁 (左を桁数分半角スペースで詰める)
SPRINTF('%-10s','あ') 'あ_________' 10桁 (右を桁数分半角スペースで詰める)

例外: 「1」 > 「10000」のように右にゼロを追加して詰めることはできません。
数値を桁数に応じて10,100,1000、10,000倍するなどの対応が必要です。

また、もし想定している桁数を超えたデータが入ってくるような場合、CASE文とLength関数、SUBSTRING関数を使用して、超過分の文字列を切り捨てることができます。
5桁を超える場合の制御例:

CASE WHEN Length(field1) > 5 THEN
  SPRINTF('%-5s'(SUBSTRING(field1,0,5)) ELSE
  SPRINTF('%-5s',field1)
END
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?