文字列の関数

様々な文字列の組込み関数があります。任意の文字列で、位置は0から始まり、長さ- 1で終了します。

例のとおりに操作する場合は、スクリプトbaggageschema_loaddata.sqlをダウンロードして、次に示すように実行します。このスクリプトにより、例で使用する表が作成され、表にデータがロードされます。

KVSTOREまたはKVLiteを起動し、SQL.shellを開きます。
java -jar lib/kvstore.jar kvlite -secure-config disable
java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
loadコマンドを使用して、スクリプトを実行します。
load -file baggageschema_loaddata.sql

substring関数

substring関数は、指定された数値の開始位置および指定された数値の部分文字列の長さに従って、指定された文字列から文字列を抽出します。
returnvalue substring (source, position [, substring_length] )

source ::= any*
position ::= integer*
substring_length ::= integer*
returnvalue ::= string
例: チケット番号が1762376407826の乗客のルーティング詳細から最初の3文字をフェッチします。
SELECT substring(bag.baginfo.routing,0,3) AS Source 
FROM baggageInfo bag 
WHERE ticketNo=1762376407826
出力:
{"Source":"JFK"}

concat関数

concat関数は、すべての引数を連結し、連結された文字列を出力として表示します。
returnvalue concat (source,[source*])
source ::= any*
returnvalue ::= string
例: 特定のチケット番号を持つ顧客のルーティングを、The route for passenger_name is ...というように表示します。
SELECT concat("The route for passenger ",fullName , " is ", bag.baginfo[0].routing)
FROM baggageInfo bag 
WHERE ticketNo=1762376407826
出力:
{"Column_1":"The route for passenger Dierdre Amador is JFK/MAD"}

upper関数とlower関数

upperおよびlowerは、すべて大文字またはすべて小文字にそれぞれ変換する単純な関数です。upper関数は、文字列内のすべての文字を大文字に変換します。lower関数は、文字列内のすべての文字を小文字に変換します。
returnvalue upper (source)
returnvalue lower (source) 

source ::= any* 
returnvalue ::= string
例1: チケット番号が1762376407826の乗客のフルネームを大文字でフェッチします。
SELECT upper(fullname) AS FULLNAME_CAPITALS 
FROM BaggageInfo 
WHERE ticketNo=1762376407826
出力:
{"FULLNAME_CAPITALS":"DIERDRE AMADOR"}
例2: チケット番号が1762376407826の乗客のフルネームを小文字でフェッチします。
SELECT lower(fullname) AS fullname_lowercase
FROM BaggageInfo WHERE ticketNo=1762376407826
出力:
{"fullname_lowercase":"dierdre amador"}

trim関数

trim関数を使用すると、文字列から先行文字または後続文字(あるいはその両方)を切り捨てることができます。ltrim関数を使用すると、文字列の先頭の文字を切り捨てることができます。rtrim関数を使用すると、文字列の後続文字を削除できます。
returnvalue trim(source [, position [, trim_character]])

source ::= any*
position ::= "leading"|"trailing"|"both"
trim_character ::= string*
returnvalue ::= string
returnvalue ltrim(source)

returnvalue rtrim(source)
source ::= any*
returnvalue ::= string
例: チケット番号が1762350390409の乗客のルート詳細から、先頭および末尾の空白を削除します。
SELECT trim(bag.baginfo[0].routing,"trailing"," ")
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
出力:
{"Column_1":"JFK/MAD"}
ltrim関数を使用した先頭のスペースの削除は、次のようになります。
SELECT ltrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
出力:
{"Column_1":"JFK/MAD"}
rtrim関数を使用した末尾のスペースの削除は、次のようになります。
SELECT rtrim(bag.baginfo[0].routing)
FROM BaggageInfo bag 
WHERE ticketNo=1762376407826
出力:
{"Column_1":"JFK/MAD"}

length関数

length関数は、文字列の長さを返します。length関数は、UTF文字セットを使用して長さを計算します。
returnvalue length(source)

source ::= any*
returnvalue ::= integer
例: チケット番号が1762350390409の乗客のフルネームの長さを確認します。
SELECT fullname, length(fullname) AS fullname_length 
FROM BaggageInfo
WHERE ticketNo=1762350390409
出力:
{"fullname":"Fallon Clements","fullname_length":15}

contains関数

contains関数は、検索文字列がソース文字列の中に存在するかどうかを示します。
returnvalue contains(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
例: ルートにSFOが含まれる乗客のフルネームをフェッチします。
SELECT fullname FROM baggageInfo bag 
WHERE EXISTS bag.bagInfo[contains($element.routing,"SFO")]
出力:
{"fullname":"Michelle Payne"}
{"fullname":"Lucinda Beckman"}
{"fullname":"Henry Jenkins"}
{"fullname":"Lorenzo Phil"}
{"fullname":"Gerard Greene"}

starts_with関数とends_with関数

starts_with関数は、ソース文字列が検索文字列から始まっているかどうかを示します。
returnvalue starts_with(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
ends_with関数は、ソース文字列が検索文字列で終わるかどうかを示します。
returnvalue ends_with(source, search_string)

source ::= any*
search_string ::= any*
returnvalue ::= boolean
例: チケット番号が176234463813の乗客について、チェックイン時から手荷物が積載時にスキャンされるまでにかかる時間はどのくらいですか。
SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
timestamp_diff(
   $flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime,
   $flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime
) AS diff
FROM baggageinfo $s, $s.bagInfo[].flightLegs[] AS $flightLeg
WHERE ticketNo=176234463813 
AND starts_with($s.bagInfo[].routing, $flightLeg.fltRouteSrc)

説明: 手荷物データでは、それぞれのflightLegに1つのactions配列があります。actions配列には3つの異なるアクションがあります。配列の最初の要素のアクション・コードは、Checkin/Offloadです。最初の区間ではアクション・コードがCheckinとなり、他の区間ではアクション・コードが中継点でのOffloadとなります。配列の2番目の要素のアクション・コードは、BagTag Scanです。前述の問合せで、手荷物タグ・スキャンとチェックイン時間の間のアクション時間の差異を確認します。アクション・コードがCheckinまたはBagScanの場合にのみ、contains関数を使用してアクション時間をフィルタ処理します。最初の飛行区間にのみチェックインおよび手荷物スキャンの詳細が含まれるため、starts_with関数を使用してさらにデータをフィルタ処理し、ソース・コードfltRouteSrcのみをフェッチします。

出力:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
例2: 目的地がJTRである乗客のリストを確認します。
SELECT fullname FROM baggageInfo $bagInfo 
WHERE ends_with($bagInfo.bagInfo[].routing, "JTR")
出力:
{"fullname":"Lucinda Beckman"}
{"fullname":"Gerard Greene"}
{"fullname":"Michelle Payne"}

index_of関数

index_of関数は、検索文字列の最初の文字(ある場合)の最初の出現時の位置を決定します。
returnvalue index_of(source, search_string [, start_position])

source ::= any*
search_string ::= any*
start_position ::= integer*
returnvalue ::= integer
様々な戻り値:
  • 検索文字列の最初の文字の最初の出現時の位置を返します。位置は、文字列の開始位置(ゼロ)からの相対位置です。
  • search_stringがソースに存在しない場合は-1を返します。
  • search_stringの長さが0である場合、ソースの値に対して0を返します。
  • 引数がNULLの場合はNULLを返します。
  • 引数が空の順序であるか、複数の項目がある順序の場合はNULLを返します。
  • start_position引数が整数でない場合はエラーを返します。
例1: チケット番号が1762320569757の乗客について、第1区間の推定到着時刻に-が含まれる位置を特定します。
SELECT index_of(bag.baginfo.flightLegs[0].estimatedArrival,"-")
FROM BaggageInfo bag 
WHERE ticketNo=1762320569757
出力:
{"Column_1":4}
例2: チケット番号が1762320569757の乗客について、第1区間のルーティングに/が含まれる位置を特定します。これは、チケット番号が1762320569757の乗客について、ソース・ポイントの文字数を特定するのに役立ちます。
SELECT index_of(bag.baginfo.routing,"/") 
FROM BaggageInfo bag 
WHERE ticketNo=1762320569757
出力:
"Column_1":3}

replace関数

replace関数は、ソースでの検索文字列のすべての出現を置換文字列に置き換えて返します。
returnvalue replace(source, search_string [, replacement_string])

source ::= any*
search_string ::= any*
replacement_string ::= any*
returnvalue ::= string
例: チケット番号が1762320569757の乗客の出発地を、SFOからSOFに置き換えます。
SELECT replace(bag.bagInfo[0].routing,"SFO","SOF") 
FROM baggageInfo bag
WHERE ticketNo=1762320569757
出力:
{"Column_1":"SOF/IST/ATH/JTR"}

例2: 乗客名の二重引用符を一重引用符で置き換えます。

乗客の名前に二重引用符が含まれている可能性がある場合は、replace関数を使用して、二重引用符を一重引用符に変更できます。
SELECT fullname, 
replace(fullname, "\"", "'") as new_fullname
FROM BaggageInfo bag

reverse関数

reverse関数は、ソース文字列の文字を、文字列の最後の文字で始まる逆の順序で返します。
returnvalue reverse(source)

source ::= any*
returnvalue ::= string
例: フルネームを表示し、チケット番号が1762330498104の乗客のフルネームを逆にします。
SELECT fullname, reverse(fullname) 
FROM baggageInfo
WHERE ticketNo=1762330498104
出力:
{"fullname":"Michelle Payne","Column_2":"enyaP ellehciM"}