Hologres V1.3 以降では、Orafce 拡張機能が導入され、一部の Oracle 関数がサポートされています。このトピックでは、Hologres でサポートされている Oracle 関数の構文と詳細について説明します。
Orafce 拡張機能をインストールする
Hologres のデータベースでサポートされている Oracle 関数を使用する前に、スーパーユーザーとして次のステートメントを実行して、データベースに Orafce 拡張機能をインストールする必要があります。拡張機能はデータベースレベルでインストールされます。拡張機能はデータベースごとに 1 回だけインストールする必要があります。データベースを作成する場合は、次のステートメントを再度実行する必要があります。
-- Orafce 拡張機能をインストールします。
create extension if not exists orafce;
-- Orafce 拡張機能をアンインストールします。
DROP EXTENSION orafce; Orafce 拡張機能がインストールされると、dbms_alert、dbms_assert、dbms_output、dbms_pipe、dbms_random、dbms_utility、oracle、plunit、plvchr、plvdate、plvlex、plvstr、plvsubst、utl_file など、複数のスキーマが自動的に作成されます。 Orafce 拡張機能をインストールする前に、データベースに同じ名前のスキーマが存在しないことを確認してください。そうでない場合、Orafce 拡張機能のインストールは失敗します。
Oracle 関数
次の表に、Hologres でサポートされている Oracle 関数を示します。
日付関数
関数
説明
例
戻り値
add_months(day date, value int)
この関数は、2 番目のパラメーターで指定された月数を、1 番目のパラメーターで指定された日付に追加し、日付を返します。
SELECT add_months(current_date, 2);2022-05-21
oracle_last_day(value date)
この関数は、指定された日付が属する月の最終日を見つけ、日付を返します。
SELECT oracle_last_day('2022-05-01');2022-05-31
next_day(value date, weekday text)
この関数は、曜日の日付を返します。曜日は、指定された日付から開始して最初に見つかる、指定された曜日です。1 番目のパラメーターは開始日を指定します。 2 番目のパラメーターは曜日を指定します。例:金曜日。
SELECT next_day('2022-05-01', 'FRIDAY');2022-05-06
next_day(value date, weekday integer)
この関数は、曜日の日付を返します。曜日は、指定された日付から開始して最初に見つかる、指定された曜日です。1 番目のパラメーターは開始日を指定します。2 番目のパラメーターは、曜日を表す数値を指定します。数値の範囲は 1 ~ 7 です。値 1 は日曜日を表し、値 2 は月曜日を表します。同様に、値 7 は土曜日を表します。
SELECT next_day('2022-05-01', 1);SELECT next_day('2022-05-01', 2);
2022-05-08
2022-05-02
months_between(date1 date, date2 date)
この関数は、date1 と date2 の間の月数を返します。 date1 が date2 より後の場合、戻り値は正になります。 date1 が date2 より前の場合、戻り値は負になります。
SELECT months_between('2022-01-01', '2021-11-01');SELECT months_between('2021-11-01', '2022-01-01');
2
-2
trunc(value timestamp with time zone, fmt text)
この関数はタイムスタンプを切り捨てて日付を返します。1 番目のパラメーターは切り捨てるタイムスタンプを指定します。2 番目のパラメーターは、タイムスタンプの切り捨てに使用する測定単位を指定します。2 番目のパラメーターの値が Y の場合、タイムスタンプは対応する年の最初の日に切り捨てられます。2 番目のパラメーターの値が Q の場合、タイムスタンプは対応する四半期の最初の日に切り捨てられます。
SELECT TRUNC(current_date,'Y');SELECT TRUNC(current_date,'Q');
2022-01-01
2022-01-01
trunc(value timestamp with time zone)
この関数は、指定された日付に基づいてタイムスタンプを返します。デフォルトでは、時、分、秒の値を持つタイムスタンプが返されます。
SELECT TRUNC('2022-03-01'::timestamp);2022-03-01 00:00:00
round(value timestamp with time zone, fmt text)
この関数は、週や日などの単位に基づいて、タイムスタンプを最も近い値に丸めます。
SELECT round('2022-02-22 13:11:22'::timestamp, 'YEAR');2022-01-01 00:00:00
round(value timestamp with time zone)
この関数は、日単位に基づいて、タイムスタンプを最も近い値に丸めます。
SELECT round('2022-02-22 13:11:22'::timestamp);2022-02-23 00:00:00
round(value date, fmt text)
この関数は、指定された形式に基づいて丸められた日付を返します。
SELECT round(TO_DATE('27-OCT-00','DD-MON-YY'), 'YEAR');SELECT round(TO_DATE('27-FEB-00','DD-MON-YY'), 'YEAR');
2001-01-01
2000-01-01
round(value date)
この関数は、指定された形式に基づいて丸められた日付を返します。
SELECT round(TO_DATE('27-FEB-00','DD-MON-YY'));2000-02-27
文字列関数
関数
説明
例
戻り値
instr(str text, patt text, start integer, nth integer)
この関数は、文字列内の部分文字列を検索します。部分文字列が取得された場合、関数は部分文字列の位置を返します。それ以外の場合、関数は 0 を返します。 start パラメーターは検索の開始位置を指定します。 nth パラメーターは、部分文字列の n 番目の出現位置を指定します。
SELECT instr('Hologres', 'o',1,2);SELECT instr('Hologres', 'o',1,1);
4
2
instr(str text, patt text, start integer)
この関数は、文字列内の部分文字列の最初の出現位置を返します。
SELECT instr('Hologres', 'o',4);4
instr(str text, patt text)
この関数は、文字列の先頭から部分文字列を検索します。
SELECT instr('Hologres', 'o');2
plvstr.rvrs(str text, start integer, end integer)
この関数は、指定された文字列の文字の順序を反転させます。 str パラメーターは文字列を指定し、start パラメーターと end パラメーターは、順序を反転させる文字の開始位置と終了位置を指定します。
SELECT plvstr.rvrs('Hologres', 5,6);rg
plvstr.rvrs(str text, start integer)
この関数は、start パラメーターで指定された文字から指定された文字列の末尾までの文字の順序を反転させます。
SELECT plvstr.rvrs('Hologres', 4);sergo
plvstr.rvrs(str text)
この関数は、文字列全体の順序を反転させます。
SELECT plvstr.rvrs('Hologres');sergoloH
substr(str text, start integer)
この関数は、start パラメーターで指定された文字から指定された文字列の末尾までの文字を取得します。
SELECT substr('Hologres', 1);SELECT substr('Hologres', 4);
Hologres
ogres
substr(str text, start integer, len integer)
この関数は、start パラメーターで指定された文字から始まる指定された数の文字を取得します。 len パラメーターは、取得する文字数を指定します。
SELECT substr('Hologres', 5, 5);SELECT substr('Oracle functions', 5, 5);
gresle
lefun
その他の関数
関数
説明
例
戻り値
listagg(str text)
この関数は、テキストのクラスター化された文字列を返します。
SELECT listagg(t) FROM (VALUES('holo'), ('gres')) as l(t);hologres
listagg(str text, str text)
この関数は、テキストのクラスター化された文字列を返します。2 番目のパラメーターの値は区切り文字として使用されます。
SELECT listagg(t, '.') FROM (VALUES('holo'), ('gres')) as l(t);holo.gres
concat(str text, str text)
この関数は、2 つの文字列を結合します。
SELECT concat('holo','gres');hologres
concat(str text, anyarray)
concat(anyarray, str text)
concat(anyarray, anyarray)
この関数は、同じデータ型または異なるデータ型のデータを結合します。
SELECT concat('hologres', 123);SELECT concat(123, 123);SELECT concat(current_date, 123);
hologres123
123123
2022-03-21123
nanvl(num real, num real)
nanvl(num decimal, num decimal)
最初のパラメーターが NUMERIC データ型の場合、この関数は最初のパラメーターの値を返します。それ以外の場合、この関数は 2 番目のパラメーターの値を返します。
SELECT nanvl('NaN', 1.1);SELECT nanvl('1.2', 1.1);
1.1
1.2
bitand(num bigint, num bigint)
この関数は、INTEGER データ型の 2 つの 2 進数に対して AND 演算を実行します。1 行だけ返されます。
SELECT bitand(1,3);SELECT bitand(2,6);SELECT bitand(4,6);
1
2
4
nvl2(anyelement, anyelement, anyelement)
最初のパラメーターの値が null の場合、この関数は 3 番目のパラメーターの値を返します。それ以外の場合、この関数は 2 番目のパラメーターの値を返します。
SELECT nvl2(null, 1, 2);SELECT nvl2(0, 1, 2);
2
1
lnnvl(boolean)
パラメーターの値が null または false の場合、この関数は true を返します。パラメーターの値が true の場合、この関数は false を返します。
SELECT lnnvl(null);SELECT lnnvl(false);SELECT lnnvl(true);
t
t
f
sinh(num double precision)
この関数は、双曲線正弦値を返します。
SELECT sinh(0.1);0.100166750019844
tanh(num double precision)
この関数は、双曲線正接値を返します。
SELECT tanh(3);0.995054753686731
cosh(num double precision)
この関数は、双曲線余弦値を返します。
SELECT cosh(0.2);1.02006675561908
decode(expression, value, return [,value,return]... [, default])
この関数は、式から値を検索し、値が見つかった場合は値を返し、値が見つからない場合は指定されたデフォルト値を返します。
CREATE TABLE t1(id int, name varchar(20)); INSERT INTO t1 values(1,'alibaba'); INSERT INTO t1 values(2,'hologres');SELECT decode(id, 1, 'alibaba', 2, 'hologres', 'not found') from t1;SELECT decode(id, 3, 'alibaba', 4, 'hologres', 'not found') from t1;
hologres alibabanot found not found
dump(anyelement)
この関数は、データ型コード、バイト単位の長さ、および最初のパラメーターの内部表現を含むテキストを返します。
SELECT dump('hologres');Typ=25 Len=12: 48,0,0,0,104,111,108,111,103,114,101,115
dump(anyelement, num integer)
この関数はテキストを返します。2 番目のパラメーターは、最初のパラメーターの内部表現で使用される記数法を指定します。
SELECT dump('hologres', 10);SELECT dump('hologres', 16);
Typ=25 Len=12: 48,0,0,0,104,111,108,111,103,114,101,115
Typ=25 Len=12: 30,0,0,0,68,6f,6c,6f,67,72,65,73
nlssort(str text, str text)
この関数は、特定の順序でデータをソートします。
次のステートメントを実行して、テーブルを作成し、テーブルにデータを挿入します。
CREATE TABLE t1 (name text); INSERT INTO t1 VALUES('Anne'), ('anne'), ('Bob'), ('bob');SELECT * FROM t1 ORDER BY nlssort(name, 'en_US.UTF-8');SELECT*FROM t1 ORDER BY nlssort(name, 'C');
anne Anne bob BobAnne Bob anne bob