テキスト処理関数

テキスト処理関数は、 text 型の値を操作および変換します。

通常、 text 型以外の入力値は、関数を適用する前に自動的に text 値に変換されます。

ASCII

説明

ASCII 関数は、入力値の最初の文字の Unicode コードポイントを返します。

構文

ASCII( <value:text> ):int
  • value: 必須。

SELECT ASCII('Denodo') AS value1, ASCII('興味深い例') AS value2

value1

value2

68

33288

CHAR

説明

CHAR 関数は、Unicode コードポイントに関連付けられた文字を返します。

入力コードポイントが 255 より大きく、この関数が Impala または Hive にプッシュダウンされた場合、この関数は NULL を返します。これは、Impala や Hive が 255 より大きいコードポイントをサポートしていないからです。

構文

CHAR( <code:int> ):text
  • code: 必須。取得する文字の Unicode コードポイント。

SELECT CHAR(65) AS char_1, CHAR(945) AS char_alpha;

char_1

char_alpha

A

α

CONCAT

説明

CONCAT 関数は、複数のパラメーターを 1 つの文字列に連結します。

構文

CONCAT( <value 1:text>, <value 2:text> [, <value N:text> ]* ):text
  • value 1: 必須。連結する最初のテキストアイテム。

  • value 2: 必須。連結する 2 番目のテキストアイテム。

  • value N: オプション。連結する 1 つ以上の引数。

SELECT original_text, CONCAT('I like to fly to ', originalText, ' every
month') as concat_text
FROM my_table;

original_text

concat_text

San Francisco, CA

I like to fly to San Francisco, CA every month

San Jose, CA

I like to fly to San Jose, CA every month

Birmingham, AL

I like to fly to Birmingham, AL every month

NY, NY

I like to fly to NY, NY every month

INSTR

説明

INSTR 関数は、別の文字列内の文字列のインデックスを返します。

構文

INSTR( <str1:text>, <str2:text> ):int

str1 内で str2 が最初に出現する箇所の最初の文字のインデックスを返します。

最初の文字のインデックスは 0 です。

str1NULL の場合、この関数は NULL を返します。

str2str1 内に存在しない場合は、 -1 を返します。

Virtual DataPort によって実行された場合、この関数は大文字と小文字を区別します。一方、データベースにプッシュダウンされた場合は、動作が異なることがあります。この関数が大文字と小文字を区別するデータベースと、区別しないデータベースがあります。

SELECT original_text, INSTR(originalText, 'i') as result
FROM myTable;

original_text

result

San Francisco, CA

9

San Jose, CA

-1

Birmingham, AL

1

NY, NY

-1

LEN

説明

LEN 関数は、テキスト文字列内の文字の数を返します。

構文

LEN( <value:text> ):int
  • value: 必須。長さを検索する対象のテキスト。空白は文字としてカウントされます。

SELECT original_text, LEN(originalText) as len_text
FROM myTable;

original_text

len_text

San Francisco, CA

18

San Jose, CA

13

Birmingham, AL

15

NY, NY

7

LOWER

説明

LOWER 関数は、テキストを小文字に変換します。

構文

LOWER( <value:text> ):text
  • value: 必須。小文字に変換するテキスト。

SELECT original_text, LOWER(originalText) as lower_text
FROM Mytable;

original_text

lower_text

San Francisco, CA

san francisco, ca

San Jose, CA

san jose, ca

Birmingham, AL

birmingham, al

NY, NY

ny, ny

LTRIM

説明

LTRIM 関数は、先行する空白とキャリッジリターンを除いた入力値を返します。

構文

LTRIM( <value:text> ):text
  • value: 必須。

MAX

説明

MAX 関数は、辞書式順序でリスト内の最大の引数を返します。この関数は、入力値の各文字の Unicode 値を比較します。

この関数は大文字と小文字を区別します。

構文

MAX( <value 1:text>, <value 2:text> [, <value N:text> ]* ):text
  • value 1: 必須。

  • value 2: 必須。

  • value N: オプション。1 つ以上の引数。

例 1

SELECT MAX('DENODO', 'Virtual DataPort')
FROM Dual();

max

Virtual DataPort

例 2

SELECT MAX('denodo', 'Virtual DataPort')
FROM Dual();

max

denodo

この例では、結果は「denodo」になります。最初の文字の Unicode 値が最大であるためです (d = 100、V = 86)。

MIN

説明

MIN 関数は、辞書式順序でリスト内の最小の引数を返します。この関数は、入力値の各文字の Unicode 値を比較します。

この関数は大文字と小文字を区別します。

構文

MIN( <value 1:text>, <value 2:text> [, <value N:text> ]*): text
  • value 1: 必須。

  • value 2: 必須。

  • value N: オプション。

例 1

SELECT MIN('ITPilot', 'Virtual DataPort', 'Solution Manager')
FROM Dual();

min

ITPilot

例 2

SELECT MIN('i', 'v', 'a')
FROM Dual();

min

a

この例では、結果は「a」になります。最初の文字の Unicode 値が最小であるためです (a = 97、i = 105、v = 118)。

POSITION

説明

POSITION 関数は、ある文字列 (value1) が別の文字列 (value2) 内に出現する場合、最初の出現位置を返します。

構文

POSITION( <value 1:text> IN <value 2:text> ) : int
  • value 1: value2 内で検索するテキスト。

  • value 2:

value 1 または value 2NULL の場合、この関数は NULL を返します。

value 1 の長さがゼロの場合、1 を返します。

value 1value 2 内に出現しない場合、ゼロを返します。

SELECT POSITION('no' IN 'Denodo') AS pos_1, POSITION('z' IN 'Denodo') AS
pos_2

pos_1

pos_2

3

0

REGEXP

説明

REGEXP 関数は、指定した正規表現に一致する、入力文字列の各部分文字列を、指定した値に置き換えます。

構文

REGEXP( <original text:text>, <regex:text>, <replacement:text> ):text
  • original text: 必須。入力文字列。

  • regex: 必須。 original text と照合する正規表現。

  • replacement: 必須。 regular expression との一致それぞれをこの内容で置換します。この値も正規表現であるため、キャプチャグループを指定できます。

いずれかのパラメーターが NULL の場合、この関数は NULL を返します。

regex は正規表現であるため、どのようなテキスト値でも渡すことができますが、一部の文字には特殊な意味があることに注意してください。たとえば、 . は単なるドットではなく任意の文字を表し、 \d は数字を表します。

この関数は、Java の正規表現の動作に準拠しており、これは Perl の正規表現の動作に非常によく似ています。詳細については、 正規表現に関する Java のドキュメント を参照してください。

文字 ^$ は、それぞれ入力値の先頭と末尾にのみ一致します。行終端記号を検出するには、 \ を使用します。

例 1

文字「#」を「*」に置換します。

SELECT REGEXP('########## DATABASE ##########', '#', '*') AS result
FROM Dual();

result

****** DATABASE ******

例 2

文字クラス「d」とキャプチャグループを使用した正規表現:

SELECT REGEXP('Number: 3829022', 'Number: (\d+)', 'Value: $1') AS result
FROM Dual();

result

Value: 3829022

$1 は最初のキャプチャグループを表します。

REMOVEACCENTS

説明

REMOVEACCENTS 関数は、アクセント付きのすべての文字をアクセントなしの同じ文字で置換します。

構文

REMOVEACCENTS( <value:text> ):text
  • value: 必須。アクセントを削除するテキスト。

SELECT REMOVEACCENTS('bё áéíóú àèìòù') as text_without_accent
FROM Dual();

text_without_accent

Bё aeiou aeiou

REPEAT

説明

REPEAT 関数は、指定した回数、テキストを繰り返します。

構文

REPEAT ( <value:text>, <count:int> ):text
  • value: 必須。繰り返すテキスト。

  • count: 必須。 value を繰り返す回数分。0 または 0 未満の場合、この関数は空の文字列を返します。

SELECT REPEAT('Denodo ', 3), REPEAT('Platform', 0)

repeat

repeat_

Denodo Denodo Denodo

REPLACE

説明

REPLACE 関数は、テキスト文字列内の古いテキストを新しいテキストで置き換えます。

構文

REPLACE( <value:text>, <from:text>, <to:text> ):text
  • value: 必須。一部またはすべてを置換するテキスト。

  • from: 必須。置換するすべての出現箇所。

  • to: 必須。 from のすべての出現箇所を置換するテキスト。

SELECT original_text, REPLACE(originalText, 'CA', 'California') as
replace_text
FROM my_table;

original_text

replace_text

San Francisco, CA

San Francisco, California

San Jose, CA

San Jose, California

Birmingham, AL

Birmingham, AL

NY, NY

NY, NY

REPLACEMAP

説明

REPLACEMAP 関数は、入力パラメーターとして text 値とキー/値ペアのリストを取り、テキスト内で各キーが出現するすべての箇所をその値で置換します。

キー/値ペアのリストはビューまたはマップから取得できます (「 マップの定義 」を参照)。リストをビューから取得する場合、キーはそのビューのいずれかのフィールドから取得され、値は別のフィールドから取得されます。

構文 1

REPLACEMAP( <search text:text>, <map_name:text> ):text
  • search_text: 必須。一部またはすべてを置換するテキスト。

  • map_name: 必須。キー/値のペアを含むマップ名。

map_name が存在しない場合、この関数は NULL を返します。

構文 2

REPLACEMAP( <search_text:text>, <viewName:text>, <keyField:text>, <valueField:text> ):text
  • searchText: 必須。一部またはすべてを置換するテキスト。

  • viewName: 必須。キー/値のペアを含むビュー。

  • keyField: 必須。キーを含む、 view_name のフィールド。

  • valueField: 必須。値を含む、 view_name のフィールド。

viewName が存在しない場合、この関数は NULL を返します。

keyField または valueField がビューのフィールドではない場合、この関数は NULL を返します。

例 1

次のマップについて考えてみます。

続いて次のクエリについて考えてみます。
CREATE MAP simple "daysOfTheWeek" (
    'Sun' = 'Sunday'
    'Mon' = 'Monday'
    'Tus' = 'Tuesday'
    'Wed' = 'Wednesday'
    'Thur'= 'Thursday'
    'Fri' = 'Friday'
    'Sat' = 'Saturday'
    'Sun' = 'Sunday'
);
SELECT text_block
    , replacemap (textblock, 'daysOfTheWeek') as text_block_with_full_name
FROM V;

text_block

text_block_with_full_name

I like to travel on Sun

I like to travel on Sunday

I am available to travel on Mon

I am available to travel on Monday

My best day of vacation is Sat because I see my relatives on Wed

My best day of vacation is Saturday because I see my relatives on Wednesday

3 番目の行にはマップのキーが 2 つ (「Sat」および「Wed」) 含まれ、どちらのキーもマップ内でこれらのキーの値に置換されます。

CREATE MAP ステートメントでは、マップの名前が二重引用符で囲まれています。そうしないと、マップや他のエレメントは小文字で作成されます。たとえば、 CREATE MAP daysOfTheWeek... の場合、マップ daysoftheweek が作成されます。

この関数の 2 番目のパラメーターは、大文字と小文字が作成時と同じマップ名にする必要があります。たとえば、 CREATE MAP daysOfTheWeek... ステートメントでマップを作成した場合、 REPLACEMAP の 2 番目のパラメーターは daysoftheweek (小文字) にする必要があります。

Virtual DataPort のエレメントの ID の詳細については、「 Unicode 識別子 」を参照してください。

例 2

days_of_the_week というビューについて考えてみます。

full_day_name

abbreviated_format

Sunday

Sun

Monday

Mon

Tuestday

Tus

Wednesday

Wed

Thursday

Thur

Friday

Fri

Saturday

Sat

続いて次のクエリについて考えてみます。

SELECT text_block,
replacemap (text_block, 'days_of_the_week', 'abbreviated_format',
'full_day_name') AS text_block_with_full_name
FROM V;

text_block

text_block_with_full_name

I like to travel on Sun

I like to travel on Sunday

I am available to travel on Mon

I am available to travel on Monday

My best day of vacation is Sat because I see my relatives on Wed

My best day of vacation is Saturday because I see my relatives on Wednesday

RTRIM

説明

RTRIM 関数は、後続の空白とキャリッジリターンを除いた入力値を返します。

構文

RTRIM( <value:text> ):text
  • value: 必須。

SIMILARITY

説明

SIMILARITY 関数は、指定したテキスト類似性アルゴリズムに基づいて、2 つのテキスト文字列のテキスト類似性を計算します。

構文

SIMILARITY( <value 1:text>, <value 2:text> [ , <algorithm:text> ]):double
  • value 1: 必須。比較するテキスト。

  • value 2: 必須。value1 と比較するテキスト。

  • algorithm: オプション。使用するアルゴリズム。Virtual DataPort は以下のテキスト類似性アルゴリズムを提供しています (デフォルトでは「JaroWinklerTFIDF」)。

テキスト文字列間の距離に基づくアルゴリズム

テキスト内での共通項の出現に基づくアルゴリズム

両方の組み合わせ

ScaledLevenshtein

TFIDF

JaroWinklerTFIDF

JaroWinkler

Jaccard

Jaro

UnsmoothedJS

Level2 Jaro

MongeElkan

Level2MongeElkan

SELECT city, SIMILARITY(city , 'San') as similarity
FROM V
ORDER BY similarity DESC

city

similarity

San Jose

0.71

San Francisco

0.71

NY

0.00

Birmingham

0.00

SPLIT

説明

SPLIT 関数は、指定した正規表現との一致部分を区切りとして文字列を分割し、これらの部分文字列を含む配列を返します。

結果には正規表現は含まれません。

構文

SPLIT( <regexp:text>, <value:text> ):array
  • regexp: 必須。正規表現。この正規表現に一致する部分文字列は結果に含まれません。

  • value: 必須。フィールド名または分割するテキスト。

次のビュー V について考えてみます。

a

b

10.10

I am some text

-80.10

Text is $% needed always

20.50

Text for a living

NULL

NULL

例 1

SELECT SPLIT('0', a), SPLIT('Text\s+\w+', b)
FROM V

split

split_1

Array { { 1 } { .1 } }

Array { I am some text }

Array { { -8 } { .1 } }

Array { , $% needed always}

Array { { 2 } { .5 } }

Array { , a living }

NULL

NULL

正規表現 Text\s+\w+ は、「Text」という語とその横にある語をキャプチャします。

例 2

SELECT split(' ', B)
FROM V

SPLIT

Array { { I } { am} { some} { text} }

Array { { Text } { is } { $% } { needed } { always } }

Array { { Text } { for } { a } { living } }

NULL

例 3

SELECT split('\.', A)
FROM V

SPLIT

Array { { 10 } { 10 } }

Array { { -80 } { 10 } }

Array { { 20 } { 50 } }

NULL

正規表現「\\.」は、ドット文字をキャプチャします。このような表記になるのは、文字 \ がエスケープされているためです。このように指定しない場合、 . は任意の文字に一致します。

SUBSTRING / SUBSTR

説明

SUBSTRING 関数および SUBSTR 関数は、入力文字列の部分文字列を返します。

構文 1構文 2 の結果は同じではありません。構文 2 で使用した場合、この関数は SQL-92 標準の仕様どおりに動作します。

構文 1

SUBSTRING( <value:text>, <start index:int> [, <end index:int> ]):text
  • value: 必須。抽出する文字を含むテキスト文字列。

  • start index: 必須。新しい部分文字列の最初の文字のインデックス。入力文字列の最初の文字のインデックスは 0 です。

  • end index: オプション。最後の文字のインデックス。

この構文の場合、この関数は、入力文字列内の start index から始まる部分文字列を返します。

start index が負の値の場合、この関数はインデックス 0 から始まる部分文字列を返します。

end index が存在しない場合、結果は start index から入力値の末尾までになります。

end index が存在する場合、結果は start index からインデックス endIndex-1 にある文字までになります。したがって、結果の長さは endIndex-startIndex になります。

次の条件のいずれかを満たす場合、この関数は空の文字列を返します。

  • start indexend index が等しい。

  • start indexvalue の長さより大きい。

次の条件のいずれかを満たす場合、この関数は NULL を返します。

  • パラメーターのいずれかが NULL である。

  • start indexend index より大きい。

構文 2

SUBSTRING( <value:text> FROM <start index:int> [ FOR <length:int> ] ):text

SUBSTR( <value:text> FROM <start index:int> [ FOR <length:int> ] ):text

SUBSTR( <value:text>, <start index:int> [, <length:int> ] ):text

これら 3 つの関数呼び出し方法の動作は、まったく同じです。

この構文の動作は、SQL-92 標準の SUBSTRING 関数で定義されています。

  • この関数は、入力文字列の start index から始まる部分文字列を返します (この構文では、最初の文字のインデックスは 1 ですが 構文 1 では 0 です)。

  • length が存在しない場合、入力値の末尾までが部分文字列になります。

  • length が存在し、入力文字列の長さが start_index + length より短い場合、部分文字列は length で指定した長さ以下になります。

  • 少なくとも 1 つのパラメーターが NULL の場合、この関数は NULL を返します。

  • length が存在し、 start index または length が負の値の場合、次の式によって結果が指定されます。この関数は、文字 C から始まって value の L 個の文字を返します。

    • L = Minimum (start index + length, length of value + 1) - Maximum (start_index, 1)

    • C = start index と 1 のうちの大きい方。

  • length が存在せず start index が負の値の場合、この関数は value を返します。

構文 1 の例

SELECT city, SUBSTRING(city, 1), SUBSTRING(city, 1, 5)
FROM locations

city

substring

substring_1

San Jose

an Jose

an J

San Francisco

an Francisco

an F

Birmingham

irmingham

irmi

NY

Y

Y

構文 2 の例

SELECT city, SUBSTRING(city FROM 2), SUBSTRING(city FROM 3 FOR 5)
FROM locations

city

substring

substring_1

San Jose

an Jose

n Jos

San Francisco

an Francisco

n Fra

Birmingham

irmingham

rming

NY

Y

<empty string>

構文 2 の例

SELECT SUBSTRING ('Denodo' from -2 for 4) AS f

f

D

TEXTCONSTANT

注釈

TEXTCONSTANT 関数は非推奨であり、Denodo Platform の将来のメジャーバージョンで削除される可能性があります。

非推奨のすべての機能のリストについては、「 Features Deprecated for Denodo Platform 8.0 」のセクションを参照してください。

説明

TEXTCONSTANT 関数は、パラメーターをテキストとして解析します。

構文

TEXTCONSTANT( <text> ):text
  • text: 必須。結果にそのまま表示するテキスト。

SELECT original_text, TEXTCONSTANT('I like to fly to') as constant_text
FROM mytable;

original_text

constant_text

San Francisco, CA

I like to fly to

San Jose, CA

I like to fly to

Birmingham , AL

I like to fly to

NY, NY

I like to fly to

TRIM

説明

TRIM 関数は、先行または後続、あるいはその両方の埋め込み文字を除いた入力文字列を返します。デフォルトでは、削除する埋め込み文字は空白文字とキャリッジリターンです。ただし、別の文字を指定できます。

LTRIM (「 LTRIM 」を参照) は、先行する空白文字とキャリッジリターンのみを削除します。

RTRIM (「 RTRIM 」を参照) は、後続の空白文字とキャリッジリターンのみを削除します。

構文 1

最初の構文では、削除される文字は空白文字とキャリッジリターンです。

2 番目の構文では、この関数はデフォルトで空白文字を削除しますが、キャリッジリターンは削除しません。

構文 2

TRIM ( <value:text> )
  • value: 必須。空白文字とキャリッジリターンを削除するテキスト。

構文

TRIM ( [ <trim specification> [ <trim character:text> ] FROM ] <value:text> )

<trim specification> ::=
    LEADING
  | TRAILING
  | BOTH
  • value: 必須。埋め込み文字を削除するテキスト。デフォルトでは空白文字です。

    このパラメーターが NULL の場合、この関数は NULL を返します。

  • LEADING/TRAILING/BOTH: オプション。

    • LEADING: 入力値の先頭から埋め込み文字を削除します。

    • TRAILING: 入力値の末尾から埋め込み文字を削除します。

    • BOTH: 入力値の先頭と末尾から埋め込み文字を削除します。

    このトークンを追加しない場合、トークン BOTH を追加した場合と等しくなります。

  • trim character: オプション。この関数は、先行または後続の値からこの文字を削除します。このパラメーターに複数の文字が含まれる場合は、最初の文字のみが考慮され、その他の文字は無視されます。

例 1

入力値の先頭と末尾から空白文字とキャリッジリターンを削除するクエリ。

SELECT original_text, TRIM(originaltext) as trim_text
FROM mytable;

original_text

trim_text

San Francisco , CA

San Francisco , CA

San Jose , CA

San Jose , CA

Birmingham , AL

Birmingham , AL

NY, NY

NY, NY

例 2

値の先頭から空白文字を削除するが、キャリッジリターンは削除しないクエリ。

SELECT original_text, TRIM( LEADING FROM originaltext) as trim_text
FROM mytable;

original_text

trim_text

San Francisco , CA

San Francisco , CA

San Jose , CA

San Jose , CA

Birmingham , AL

Birmingham , AL

NY, NY

NY, NY

例 3

値の末尾から文字「c」を削除するクエリ。

SELECT original_text, TRIM( TRAILING 'c' FROM original_text ) as trim_text
FROM mytable;

original_text

trim_text

aaabbcbccc

aaabbcb

aaabbb

aaabbb

<null>

<null>

UPPER

説明

UPPER 関数は、テキストを大文字に変換します。

構文

UPPER( <value:text> ):text
  • value: 必須。大文字に変換するテキスト。

SELECT original_text, UPPER(originalText) as upper_text
FROM Mytable;

original_text

upper_text

San Francisco , CA

SAN FRANCISCO , CA

San Jose , CA

SAN JOSE , CA

Birmingham , AL

BIRMINGHAM , AL

NY, NY

NY , NY