関数は、データを操作し、結果を戻します。この章には、すべての関数のアルファベット順のリストに加え、次の関数の概要も含まれています。
TimesTenでは、次の文字列関数がSELECT文でサポートされています。
文字列関数を指定する選択済の値によって、SELECTがマテリアライズされます。これによって時間と領域の両方においてオーバーヘッドが発生します。
LOB関数は、TimesTen Scaleoutではサポートされていません。
次のEMPTY_*関数は、LOBをNULL以外の値に初期化します。
次のTO_*関数は、特定のデータ型を任意のLOBデータ型に変換します。
変換ファンクションは、あるデータ型から他のデータ型に値を変換します。一部の変換関数の名前は、TO_datatypeの表記規則に従います。
SQL変換関数は次のとおりです。
集計関数は、グループ内のすべての行で特定の操作を実行します。集計ファンクションは、単一行ではなく行のグループに基づいて1つの結果行を戻します。通常、SELECT文のGROUP BY句とともに使用され、戻される列はグループに分かれます。GROUP BY句を指定しないと、選択リストの集計関数が問合せ対象の表またはビューのすべての行に適用されます。
選択リストまたはHAVING句に集計関数を指定できます。詳細は、「SELECT」を参照してください。式の値は、WHERE句の条件を満たす各行を使用して計算されます。
単一の引数をとる多くの集計関数では、ALLキーワードまたはDISTINCTキーワードを使用できます。デフォルトは、ALLです。ALLまたはDISTINCTを使用できるかどうかについては、各集計関数の構文を参照してください。
DISTINCTを集計関数で指定すると、引数式の重複を排除した値のみが考慮されます。
ALLを集計関数で指定すると、重複を含むすべての値が考慮されます。
たとえば、1、1、1、3の平均値はDISTINCTでは2となります。これらの結果のALLの平均は、1.5になります。
GROUP BY句内のROLLUPおよびCUBE句は、列の値がNULL値で表される超集合行を生成します。超集合行はNULLで示されるため、NULL値および超集合結果を含む問合せ結果を区別することが困難な場合があります。さらに、戻された小計内で、指定された小計の正確な集計レベルをどのように探し出すかということも問題です。この問題を解決するには、GROUP_ID、GROUPINGおよびGROUPING_ID関数を使用します。
次の内容の詳細は、第1章「データ型」を参照してください。
集計関数の評価において実行される切捨てとデータ型の変換。
数値引数を含む集計関数の精度とスケール。
集計関数の結果のデータ型の制御。
分析関数は行のグループに基づいて集計値を計算します。集計関数との違いは、グループごとに複数の行を戻す点です。行のグループをウィンドウといい、analytic_clauseで定義されます。
分析関数は、問合せで最後に実行される演算(最後のORDER BY句を除く)の集合です。すべての結合、WHERE句、GROUP BY句およびHAVING句は、分析関数が処理される前に実行されます。最後のORDER BY句は、分析関数の結果を順序変更するために使用されます。分析関数は、問合せまたは副問合せの選択リスト、およびORDER BY句に指定できます。
分析関数を使用すると、問合せの結果セットをパーティションと呼ばれる行グループに分割できます。列または式でパーティションを定義できます。問合せ結果セットは、すべての行を持つ1つのパーティション、少数の大きなパーティション、またはそれぞれが数行しか持たない多数の小さなパーティションに分割可能です。
パーティションの行ごとに、スライディング・ウィンドウを定義できます。このウィンドウで、カレント行の計算に使用される行の範囲が決まります。ウィンドウ・サイズは、行の物理的な数に基づきます。ウィンドウには開始行および終了行があり、片方の端または両方の端で移動できます。たとえば、累積SUM関数を定義したウィンドウには、パーティションの最後の行に固定された開始行が含まれ、終了行は開始点からパーティションの最後の行までスライドします。反対に、移動平均を定義したウィンドウには開始点と終了点の両方のスライドが含まれます。
ウィンドウは、パーティションのすべての行、またはパーティション内の1行と同じ大きさに設定できます。
各関数には、複数の順序式を指定できます。これは、2番目の式が最初の式にある同一値との間の関連性を変換できるため、値をランク付けする関数を使用する場合に有効です。
通常、分析ファンクションは、累積集計、移動集計、センター集計およびレポート集計の実行に使用されます。
制限:
分析関数は、マテリアライズド・ビューではサポートされていません。
分析関数のリストは、次のとおりです。アスタリスク(*)付きの関数は、WindowingClauseをサポートしています。
分析関数の構文:
AnalyticFunctionName ([arguments]) OVER ([AnalyticClause]) AnalyticClause::= QueryPartitionClause [ORDER BY OrderByClause [,...] [WindowingClause]] | ORDER BY OrderByClause [,...] [WindowingClause] QueryPartitionClause::= PARTITION BY {Expression[,Expression]... | (Expression[,Expression]...) } OrderByClause::=Expression[ASC|DESC] [NULLS {FIRST|LAST}] WindowingClause::= ROWS { BETWEEN StartPoint AND EndPoint | StartPoint } StartPoint::= UNBOUNDED PRECEDING | CURRENT ROW |PosNumConstantExpr{ PRECEDING | FOLLOWING } EndPoint::= UNBOUNDED FOLLOWING | CURRENT ROW |PosNumConstantExpr{ PRECEDING | FOLLOWING }
| パラメータ | 説明 | 
|---|---|
AnalyticFunctionName | 
分析関数の名前。 | 
arguments | 
分析関数の引数。引数の数は分析関数によって異なります。関数に対する引数の詳細は、特定の関数を参照してください。 | 
OVER ( [ AnalyticClause ] ) | 
関数が分析関数であることを示します。この句は、FROM、WHERE、GROUP BYおよびHAVING句の後に計算されます。
  | 
QueryPartitionClause | 
AnalyticClauseで使用されるオプションの句。PARTITION BY句で示されます。指定すると、問合せ結果セットがExpressionリストに基づいてグループにパーティション化されます。この句を省略すると、ファンクションは問合せ結果セットのすべての行を単一のグループとして扱います。
同じまたは異なる 
  | 
ORDER BY OrderByClause | 
AnalyticClauseで使用されるオプションの句。この句を使用して、パーティション内のデータの順序を指定します。Expressionは、列の名前または位置には指定できません。
各キーが 分析関数は、この句で指定された順序で動作します。ただし、この句は、結果の順序は保証しません。最終結果の順序を保証するには、問合せの 
 
  | 
ASC | DESC | 
順序付けシーケンス(昇順または降順)を指定します。デフォルトはASCです。
句はオプションです。  | 
NULLSFIRST|NULLSLAST | 
NULL値を含む行を、順序付けシーケンスの最初に指定するか最後に指定するかを指定します。NULLS LASTは、昇順のデフォルトです。NULLS FIRSTは、降順のデフォルトです。
句はオプションです。  | 
WindowingClause | 
句は、ROWSキーワードで示されます。物理単位(行)で表されるウィンドウを行ごとに指定します。ウィンドウは、関数結果の計算に使用されます。関数は、ウィンドウのすべての行に適用されます。ウィンドウは、問合せ結果セット内またはパーティションの上から下まで移動します。
 分析関数が戻す値は、順序付けシーケンスの結果が一意の順序でなければ非決定的な結果を生成することがあります。この場合、 
  | 
BETWEEN...AND | 
BETWEEN...AND句を使用すると、ウィンドウに開始点(StartPoint)および終了点(EndPoint)を指定できます。
  | 
StartPoint | 
有効な値は、UNBOUNDED PRECEDING、CURRENT ROW、PosNumConstantExpr、PRECEDINGまたはPosNumConstantExpr FOLLOWINGです。
  | 
EndPoint | 
有効な値は、UNBOUNDED FOLLOWING、CURRENT ROW、PosNumConstantExpr PRECEDINGまたはPosNumConstantExpr FOLLOWINGです。
  | 
UNBOUNDED PRECEDING | 
UNBOUNDED PRECEDINGを使用して、パーティションの最初の行でウィンドウが開始することを示します。
終了点として使用することはできません。  | 
UNBOUNDED FOLLOWING | 
UNBOUNDED FOLLOWINGを使用して、パーティションの最後の行でウィンドウが終了することを示します。
開始点として使用することはできません。  | 
CURRENT ROW | 
CURRENT ROWが開始点のとき、ウィンドウがカレント行から始まることを指定します。この場合、PosNumConstantExpr PRECEDINGを終了点にすることはできません。
  | 
PosNumConstantExpr {PRECEDING | FOLLOWING } | 
PosNumConstantExpr FOLLOWINGが開始点の場合、終了点はPosNumConstantExpr FOLLOWINGまたはUNBOUNDED FOLLOWINGである必要があります。PosNumConstantExpr PRECEDINGが終了点の場合、開始点はPosNumConstantExpr PRECEDINGまたはUNBOUNDED PRECEDINGである必要があります。
終了点 
  | 
ELEMENTIDCOMPUTE SQL関数は、TimesTen Scaleoutでのみサポートされています。
ABS関数は、Expressionの絶対値を戻します。
説明
ExpressionがNUMBER型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。それ以外の場合、ABSでは、Expressionの数値データ型と同じデータ型が戻されます。
Expressionの値がNULLの場合、NULLが戻されます。Expressionの値が-INFの場合、INFが戻されます。
例
表abstestを作成してBINARY_FLOATおよびTT_INTEGER型の列を定義します。値-BINARY_FLOAT_INFINITYおよび-10を挿入します。ABSをコールして絶対値を戻します。戻り値はINFおよび10になります。
Command> CREATE TABLE abstest (col1 BINARY_FLOAT, col2 TT_INTEGER);
Command> INSERT INTO abstest 
         VALUES (-BINARY_FLOAT_INFINITY, -10);
1 row inserted.
Command> SELECT ABS (col1) FROM abstest;
< INF >
1 row found.
Command> SELECT ABS (col2) FROM abstest;
< 10 >
1 row found.
ACOS関数は、Expressionのアーク・コサインを返します。
パラメータ
ACOSには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
ADD_MONTHS関数は、日付dateに月数integerを加算した値を戻します。
説明
戻り型は、dateのデータ型にかかわらず常にDATEです。サポートされるデータ型は、DATE、TIMESTAMP、ORA_TIMESTAMPおよびORA_DATEです。
データ型TIME、TT_TIME、TT_DATEおよびTT_TIMESTAMPはサポートされていません。
dateが月の最終日である場合、または結果となる月の日数がdateの日付部分より少ない場合、結果となる月の最終日が戻されます。それ以外の場合は、dateと同じ日付部分が結果として戻されます。
例
ADD_MONTHS関数をコールして、2007年1月31日という日付に1か月を加算します。2月の最終日が戻されます。
Command> SELECT ADD_MONTHS (DATE '2007-01-31', 1) FROM dual; < 2007-02-28 00:00:00 > 1 row found.
dateがTIMESTAMP型の場合、ADD_MONTHSによりDATEデータ型が戻されます。
Command> DESCRIBE SELECT ADD_MONTHS (TIMESTAMP '2007-01-31 10:00:00', 1) 
         FROM dual;
Prepared Statement:
  Columns:
    EXP                             DATE NOT NULL
HRスキーマを使用して、employee_id、last_nameおよびhire_dateを表示する、employees表の先頭の5行を選択します。CREATE TABLE ... AS SELECT文を使用して新しい表temp_hire_dateを作成します。ADD_MONTHSをコールして元のhire_dateに23か月を加算します。
Command> SELECT FIRST 5 employee_id, last_name, hire_date FROM employees;
< 100, King, 1987-06-17 00:00:00 >
< 101, Kochhar, 1989-09-21 00:00:00 >
< 102, De Haan, 1993-01-13 00:00:00 >
< 103, Hunold, 1990-01-03 00:00:00 >
< 104, Ernst, 1991-05-21 00:00:00 >
5 rows found.
Command> CREATE TABLE temp_hire_date (employee_id, last_name,
           hire_date) AS SELECT FIRST 5 employee_id, last_name,
        ADD_MONTHS (hire_date, 23) FROM employees;
5 rows inserted.
Command> SELECT * FROM temp_hire_date;
< 100, King, 1989-05-17 00:00:00 >
< 101, Kochhar, 1991-08-21 00:00:00 >
< 102, De Haan, 1994-12-13 00:00:00 >
< 103, Hunold, 1991-12-03 00:00:00 >
< 104, Ernst, 1993-04-21 00:00:00 >
5 rows found.
ASCIISTR関数は、すべての文字セットでの文字列または文字列に解決される式のいずれかを引数とし、データベース文字セットのASCIIバージョンの文字列を戻します。非ASCII文字はUnicodeエスケープに変換されます。
パラメータ
ASCIISTRには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
[N]'String' | 
ASCIISTR関数に渡される文字列に対して評価する文字列または式。文字列は任意の文字セットで指定できます。値は、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型を含む、サポートされているデータ型になります。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。データベース文字セットのASCIIバージョンの文字列が戻されます。文字列をUTF-16書式で渡す場合は、Nを指定します。 | 
例
次の例では、ASCIISTR関数を呼び出し、'Aäa'を引数としてUTF-16書式で渡します。ASCIIバージョンはWE8ISO8859P1文字セットで戻されます。非ASCII文字äは、Unicodeエンコード値に変換されます。
Command> connect "dsn=test; ConnectionCharacterSet= WE8ISO8859P1"; Connection successful: DSN=test;UID=user1;DataStore=/datastore/user1/test; DatabaseCharacterSet=WE8ISO8859P1; ConnectionCharacterSet=WE8ISO8859P1;PermSize=32; (Default setting AutoCommit=1) Command> SELECT ASCIISTR (n'Aäa') FROM dual; < A\00E4a > 1 row found.
ASIN関数は、Expressionのアーク・サインを返します。
パラメータ
ASINには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
ATAN関数は、Expressionのアーク・タンジェントを返します。
パラメータ
ATANには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
ATAN2関数は、Expression1およびExpression2のアーク・タンジェントを返します。
パラメータ
ATAN2には、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
Expression2 | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
引数の値の平均値を計算します。NULL値は無視されます。
パラメータ
AVGには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
ALL | 
集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。 | 
DISTINCT | 
集計関数の引数から、重複する列の値を削除します。 | 
OVER ([AnalyticClause]) | 
指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。 | 
説明
GROUP BYが使用されていない空の表でAVGを計算すると、AVGはNULLを戻します。
空のグループまたはグループ化された空の表(GROUP BYを使用)でAVGを計算すると、AVGは何も戻しません。
AVGは、SUM/COUNTとして評価されます。結果のデータ型は、DIV演算子に適用されるルールを使用して導出されます。
問合せでAnalyticClauseを指定しない場合、AVGは集計関数として機能します。
DISTINCTおよびAnalyticClauseを指定する場合は、QueryPartitionClauseのみを指定できます。OrderByClauseおよびWindowingClauseは指定できません。
expression1およびexpression2のビットでAND演算を計算します。
パラメータ
BITANDには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1
  | 
Expression1およびExpression2のビットで計算されるAND演算。 | 
expression1およびexpression2のビットで排他OR演算を計算します。
データをある型から別の型に変換できます。CASTは定数が使用可能な場合に使用できます。CASTは引数の正確なデータ型を指定する場合に役立ちます。-のような単項演算子、またはTO_CHARやTO_DATEのような1つのオペランドを持つ関数の場合に特にあてはまります。
値は、互換性のあるデータ型に対してのみCASTできます。ただし、NULLを除きます。NULLは他の任意のデータ型にキャストできます。NULLリテラルを必要なターゲット・タイプに変換する場合、CASTは必要ありません。
次の変換がサポートされています。
数値から数値または2進化10進コード(BCD)へ
NCHAR to NCHAR
CHAR文字列からBINARY文字列またはDATE、TIMEまたはTIMESTAMPへ
BINARY文字列からBINARYまたはCHAR文字列へ
DATE、TIMEまたはTIMESTAMPからCHARへ
CHR関数は、データベース文字セットに指定されたバイナリ値を持つ文字を戻します。
CEIL関数は、Expression以上の最小の整数を戻します。
COALESCE関数は、式リスト内の最初のNULL以外の式を戻します。すべての式がNULLと評価された場合は、NULLを戻します。
パラメータ
COALESCEには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1, Expression2 [,...] | 
式リスト内の式。式リスト内の最初のNULL以外の式が戻されます。
 各式は順に評価され、2つ以上の式が存在する必要があります。  | 
例
次に、COALESCE式を使用した例を示します。COALESCE式を使用して、manager_id = 100である従業員のうち最初の10人に対して、commission_pctを戻します。commission_pctがNOT NULLの場合、commission_pctの元の値が戻されます。commission_pctがNULLの場合には、0(ゼロ)が戻されます。
Command> SELECT FIRST 10 employee_id, COALESCE (commission_pct, 0) FROM
          employees WHERE manager_id = 100;
< 101, 0 >
< 102, 0 >
< 114, 0 >
< 120, 0 >
< 121, 0 >
< 122, 0 >
< 123, 0 >
< 124, 0 >
< 145, .4 >
< 146, .3 >
10 rows found.
CONCAT関数は、新しい文字列を作成するために、ある文字列と別の文字列を連結します。
パラメータ
CONCATには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB式。 | 
Expression2 | 
CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB式。 | 
説明
CONCATはExpression2と連結されたExpression1を返します。
Expression1とExpression2のデータ型には互換性がある必要があります。
Expression2がNULLの場合、CONCATはExpression1を返します。Expression1がNULLの場合、CONCATはExpression2を返します。
Expression1とExpression2が両方NULLであれば、CONCATはNULLを返します。
NCHARとNVARCHAR2も同様に扱われます。扱われるオペランドのいずれかが可変長であれば、戻り値も可変長になります。その他の場合、戻り値は固定長です。
CONCATの戻り型はExpression1とExpression2の型によって異なります。2つの異なるデータ型を連結すると、結果を含むことのできるデータ型が戻されます。そのため、引数の1つが各国語文字データ型の場合は、戻り値は各国語文字データ型となります。引数の1つがLOBの場合、戻り値はLOBとなります。
次の表に、戻り型の決定方法の例を示します。
| Expression1 | Expression2 | CONCAT | 
|---|---|---|
CHAR(m) | 
CHAR(n) | 
CHAR(m+n) | 
CHAR(m) | 
VARCHAR2(n) | 
VARCHAR2(m+n) | 
VARCHAR2(m) | 
CHAR(n) | 
VARCHAR2(m+n) | 
VARCHAR2(m) | 
VARCHAR2(n) | 
VARCHAR2(m+n) | 
CLOB | 
NCLOB | 
NCLOB | 
NCLOB | 
NCHAR | 
NCLOB | 
NCLOB | 
CHAR(n) | 
NCLOB | 
NCHAR(n) | 
CLOB | 
NCLOB | 
例
次の例では、姓と名前を連結します。
Command> SELECT CONCAT(CONCAT(first_name, ' '), last_name), salary 
         FROM employees;
< Steven King, 24000 >
< Neena Kochhar, 17000 >
< Lex De Haan, 17000 >
< Alexander Hunold, 9000 >
...
107 rows found.
次の例では、列idを列id2と連結します。この例では、結果のデータ型はNCHAR(40)になります。
Command> CREATE TABLE cat (id CHAR (20), id2 NCHAR (20));
Command> INSERT INTO cat VALUES ('abc', 'def');
1 row inserted.
Command> SELECT CONCAT (id,id2) FROM cat;
< abc                 def                  >
1 row found.
||演算子の詳細は、「式の指定」を参照してください。
COS関数は、Expressionのコサイン(ラジアンで表された角度)を返します。
パラメータ
COSには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
COSH関数は、Expressionのハイパボリック・コサインを返します。
パラメータ
COSHには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
WHERE句を満たすすべての行数を、NULL値の行も含めてカウントします。結果のデータ型はTT_BIGINTです。
COUNTは集計関数で、集計分析関数にもなります。集計関数の詳細は、「集計関数」を参照してください。分析関数の詳細は、「分析関数」を参照してください。表の行数の詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』の「SYS.TABLES」にあるNUMTUPSフィールドに関する説明を参照してください。
パラメータ
COUNTには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
任意の数値データ型、または暗黙的に数値型に変換可能な数値以外の型を取ります。
 すべての行をカウントします。NULL値を含む行はカウントされません。結果のデータ型は  | 
* | 
WHERE句を満たす行の数を、重複行およびNULL値の行も含めてカウントします。COUNTはNULLを返すことはありません。結果のデータ型はTT_BIGINTです。表の行数の詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』の「SYS.TABLES」にあるNUMTUPSフィールドに関する説明を参照してください。 | 
ALL | 
集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。 | 
DISTINCT | 
集計関数の引数から、重複する列の値を削除します。 | 
ROWID | 
TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。ROWID値はROWID擬似列から取得されます。詳細は、「ROWID疑似列」を参照してください。 | 
OVER ([AnalyticClause]) | 
指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。 | 
説明
GROUP BY句が使用されていない空の表で集計関数を計算すると、COUNTは0を返します。
空のグループまたはグループ化された空の表(GROUP BYを使用)で集計関数を計算すると、COUNTは何も返しません。
問合せでAnalyticClauseを使用しない場合、COUNTは集計関数として機能します。
DISTINCTおよびAnalyticClauseを指定する場合は、QueryPartitionClauseのみを指定できます。OrderByClauseおよびWindowingClauseは指定できません。
例
従業員の数をカウントします。
Command> SELECT COUNT(*) "TOTAL EMP" FROM employees; TOTAL EMP < 107 > 1 row found.
個々のマネージャIDを重複しないように選択して、マネージャの数をカウントします。
Command> SELECT COUNT(DISTINCT manager_id) "Managers" FROM employees; MANAGERS < 18 > 1 row found.
DECODE関数は、式を各検索値と1つずつ比較します。式が検索値と等しい場合、結果の値が戻されます。一致するものがない場合は、デフォルト値(指定されている場合)が戻されます。それ以外の場合は、NULLが戻されます。
パラメータ
DECODEには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
検索値と比較される式。Expressionは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型を取ります。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。 | 
SearchValue | 
式が1つ以上の検索値と比較されます。 | 
Result | 
式がSearchValueと等しい場合、指定されたResult値が戻されます。 | 
Default | 
一致するものが検出されない場合、デフォルト値が戻されます。Defaultはオプションです。Defaultが指定されず、一致するものが検出されない場合、NULLが戻されます。 | 
例
次の例では、DECODE関数を呼び出します。locations表で、列country_idが'IT'と等しい場合は、'Italy'が戻されます。country_idが'JP'と等しい場合は、'Japan'が戻されます。country_idが'US'と等しい場合は、'United States'が戻されます。country_idが'IT'、'JP'または'US'と等しくない場合は、'Other'が戻されます。
Command> SELECT location_id, 
         DECODE (country_id, 'IT', 'Italy', 
                 'JP', 'Japan', 'US', 'United States', 'Other') 
         FROM locations WHERE location_id < 2000;
LOCATION_ID, EXP
< 1000, Italy >
< 1100, Italy >
< 1200, Japan >
< 1300, Japan >
< 1400, United States >
< 1500, United States >
< 1600, United States >
< 1700, United States >
< 1800, Other >
< 1900, Other >
10 rows found.
DENSE_RANK関数は分析関数で、順序付けされた行のグループ内の行のランクを計算し、そのランクをNUMBER型として戻します。
| パラメータ | 説明 | 
|---|---|
QueryPartitionClause | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
OrderByClause | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
説明
ランクは1から始まる連続した整数です。ランクの最大値は、問合せが戻す一意の数値です。同ランクの場合、ランクの値はスキップされません。そのランク付け基準に関して同じ値を持つ行は、同じランクになります。
DENSE_RANKは、他の行について、問合せで戻される各行のランクを計算します。この計算は、OrderByClauseにあるExpressionsの値に基づいて行われます。
例
人事部門または購買部門で働くすべての従業員の部門名、従業員名および給与を選択します。この2つの部門それぞれについて、一意の各給与に対するランクを計算します。同じ給与は同じランクになります。
Command> SELECT d.department_name, e.last_name, e.salary, DENSE_RANK()
           OVER (PARTITION BY e.department_id ORDER BY e.salary) AS dense
         FROM employees e, departments d
         WHERE e.department_id = d.department_id
         AND d.department_id IN ('30', '40')
         ORDER BY e.last_name, e.salary, d.department_name, dense;
< Purchasing, Baida, 2900, 4 >
< Purchasing, Colmenares, 2500, 1 >
< Purchasing, Himuro, 2600, 2 >
< Purchasing, Khoo, 3100, 5 >
< Human Resources, Mavris, 6500, 1 >
< Purchasing, Raphaely, 11000, 6 >
< Purchasing, Tobias, 2800, 3 >
7 rows found.
ELEMENTIDCOMPUTE関数は、TimesTen Scaleoutのみでサポートされています。この関数は、分散キーが属している要素のIDを戻します。
| パラメータ | 説明 | 
|---|---|
Expression | 
1つ以上の式。 | 
説明
ELEMENTIDCOMPUTE SQL関数では、1つ以上の式を使用できます。この式のリストは、ハッシュ分散キーを表します。この関数によって戻される要素IDは、トランザクション内では固定されています。TimesTen Scaleoutのトポロジが変更されると、行が別の要素にマップされることで、特定の行の要素のIDが変化する場合があります。
この関数を使用すると、特定の分散キーが挿入される要素を予測できます。詳細は、例4-3「分散キーの要素の予測」を参照してください。
ELEMENTIDCOMPUTEは、TT_INTEGERデータ型を戻します。
| 
 ノート: K-safetyを2に設定した場合、ELEMENTIDCOMPUTEはレプリカ・セットのいずれかの要素のIDを戻します。戻される値は、データ行がローカル要素IDにマップされる場合でも、接続している要素IDでないことがあります。 | 
例
これらの例では、ELEMENTIDCOMPUTE関数の使用方法を示します。
例4-1 分散キーの要素IDを戻すためのELEMENTIDCOMPUTEの呼出し
この例では、cust_id分散キーが属するレプリカ・セット内の1つの要素の要素IDを戻すために、ELEMENTIDCOMPUTE関数を呼び出します。また、この問合せによって、cust_idが910から920のcustomers表からcust_id、last_nameおよびfirst_name列も戻されます。
Command> SELECT ELEMENTIDCOMPUTE (cust_id), cust_id,last_name,first_name
         FROM customers WHERE cust_id BETWEEN 910 AND 920
         ORDER BY cust_id, last_name, first_name;
< 3, 910, Riley, Tessa >
< 1, 911, Riley, Rashad >
< 1, 912, Riley, Emma >
< 1, 913, Rivera, Erin >
< 1, 914, Roberts, Ava >
< 1, 915, Roberts, Lee >
< 3, 916, Roberts, Clint >
< 5, 917, Robertson, Faith >
< 3, 918, Robinson, Miguel >
< 3, 919, Robinson, Mozell >
< 5, 920, Rodgers, Darryl >
11 rows found.
例4-2 レプリカ・セットのいずれかの要素を戻す
この例では、要素1と2は、同じレプリカ・セットに含まれています。この例は、要素1への接続とレプリカ(要素2)への2番目の接続を示しています。要素2に接続した場合、ELEMENTIDCOMPUTEから戻される値は、データ行が要素2にマップされる場合でも要素2ではありません。この例は、戻される値がアプリケーションの接続先の要素IDでない可能性があることを示しています。
Command> SELECT elementId# FROM dual; < 1 > 1 row found. Command> SELECT FIRST 5 ELEMENTIDCOMPUTE (cust_id), elementid# FROM customers; < 1, 1 > < 1, 1 > < 1, 1 > < 1, 1 > < 1, 1 > 5 rows found. Command> SELECT elementId# FROM dual; < 2 > 1 row found. Command> SELECT FIRST 5 ELEMENTIDCOMPUTE (cust_id), elementid# FROM customers; < 1, 2 > < 1, 2 > < 1, 2 > < 1, 2 > < 1, 2 > 5 rows found.
例4-3 分散キーの要素の予測
この例では、ELEMENTIDCOMPUTE関数を使用して、データの特定の行が挿入される要素を予測する方法を示します。customers表に、1から1000のcust_id値があります。cust_id 1003、2000または2400が挿入される要素を予測します。
たとえば、1003のcust_id値は、customers表に挿入された場合、要素5を含むレプリカ・セットに格納されると予測されます。
Command> SELECT FIRST 1 ELEMENTIDCOMPUTE (CAST (? AS NUMBER)) FROM customers; Type '?' for help on entering parameter values. Type '*' to end prompting and abort the command. Type '-' to leave the parameter unbound. Type '/;' to leave the remaining parameters unbound and execute the command. Enter Parameter 1 '_QMARK_1' (NUMBER) > 1003 < 5 > 1 row found.
2000のcust_id値は、customers表に挿入された場合、要素3を含むレプリカ・セットに格納されると予測されます。
Command> SELECT FIRST 1 ELEMENTIDCOMPUTE (CAST (? AS NUMBER)) FROM customers; Type '?' for help on entering parameter values. Type '*' to end prompting and abort the command. Type '-' to leave the parameter unbound. Type '/;' to leave the remaining parameters unbound and execute the command. Enter Parameter 1 '_QMARK_1' (NUMBER) > 2000 < 3 > 1 row found.
2400のcust_id値は、customers表に挿入された場合、要素1を含むレプリカ・セットに格納されると予測されます。
Command> SELECT FIRST 1 ELEMENTIDCOMPUTE (CAST (? AS NUMBER)) FROM customers; Type '?' for help on entering parameter values. Type '*' to end prompting and abort the command. Type '-' to leave the parameter unbound. Type '/;' to leave the remaining parameters unbound and execute the command. Enter Parameter 1 '_QMARK_1' (NUMBER) > 2400 < 1 > 1 row found.
EMPTY_BLOB関数を使用すると、BLOB列を長さが0(ゼロ)で空のBLOBに初期化できます。この関数は、LOBをNULL以外の値に初期化するため、NOT NULLと宣言されているBLOBの初期化に使用できます。
この関数は、TimesTen Scaleoutではサポートされていません。
EMPTY_CLOB関数を使用すると、CLOBまたはNCLOB列を長さが0(ゼロ)で空のCLOBまたはNCLOBに初期化できます。CLOBデータ型とNCLOBデータ型の両方が、EMPTY_CLOB関数で初期化されます。この関数は、LOBをNULL以外の値に初期化するため、NOT NULLと宣言されているCLOBまたはNCLOBの初期化に使用できます。
この関数は、TimesTen Scaleoutではサポートされていません。
EXP関数は、n乗したe (e = 2.71828183...)を返します。
パラメータ
EXPには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
EXTRACT関数は、指定された日時フィールドの値を、日時または時間隔の値の式からNUMBERデータ型として抽出して返します。この関数は、日時フィールドの値を非常に大きな表で操作する場合に役立つことがあります。
パラメータ
EXTRACTには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
DateTimeField | 
IntervalExpressionまたはDateTimeExpressionから抽出されるフィールドです。指定できるフィールドは、YEAR、MONTH、DAY、HOUR、MINUTEまたはSECONDです。 | 
IntervalExpression | 
時間隔の結果です。 | 
DateTimeExpression | 
日時の式です。たとえば、TIME、DATE、TIMESTAMPなどです。 | 
説明
DateTimeFieldとDateTimExpressionまたはIntervalExpressionを組み合せた結果が、あいまいになる場合があります。この場合、TimesTenではUNKNOWNが返されます。
抽出するフィールドは、IntervalExpressionまたはDateTimeExpressionのフィールドである必要があります。たとえば、DATE値からは、YEAR、MONTHおよびDAYのみを抽出できます。同様に、TIME、DATEまたはTIMESTAMPデータ型からは、HOUR、MINUTEまたはSECONDのみを抽出できます。
フィールドは、NUMBER値に抽出されます。
FIRST_VALUE関数は分析関数で、順序付けられた値の集合にある最初の値を戻します。
| パラメータ | 説明 | 
|---|---|
Expression | 
サポートされるExpressionsの詳細は、「分析関数」を参照してください。 | 
IGNORE NULLS | 
FIRST_VALUEが、集合内の最初のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするにはIGNORE NULLSを指定します。句はオプションです。 | 
OVER (AnalyticClause) | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
説明
集合内の最初の値がNULLの場合、IGNORE NULLSを指定していないかぎり、FIRST_VALUEはNULLを戻します。関数が、集合内の最初のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするにはIGNORE NULLSを指定します。
例
FIRST_VALUE関数を使用して、部門90の各従業員について、給与が最も少ない従業員の姓を選択します。
Command> SELECT department_id, last_name, salary, FIRST_VALUE (last_name) OVER
          (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) AS lowest_sal
         FROM
          (SELECT * FROM employees WHERE department_id = 90 ORDER BY employee_id)
           ORDER BY department_id, last_name, salary, lowest_sal;
< 90, De Haan, 17000, Kochhar >
< 90, King, 24000, Kochhar >
< 90, Kochhar, 17000, Kochhar >
3 rows found.
FLOOR関数は、Expression以下の最大の整数を戻します。
GREATEST関数は、1つ以上の式のリストのうち、最大のものを戻します。
パラメータ
GREATESTには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression [,...] | 
最大の式の値を決定するために評価される1つ以上の式のリスト。オペランドまたは列には、数値、文字または日付を指定できます。リスト内の各式は、同じデータ型ファミリから採用する必要があります。 | 
説明
リスト内の各式は、同じデータ型ファミリまたは日付サブファミリから採用する必要があります。データ型ファミリには、数値、文字および日付が含まれます。日付ファミリには、4つのサブファミリ(日付ファミリ、TIMEファミリ、TT_DATEファミリおよびTT_TIMESTAMPファミリ)が含まれます。たとえば、式のリストに数値式と文字式を指定することはできません。同様に、式のリストに日付式とTT_TIMESTAMP式を指定することはできません。
最初のExpressionが数値の場合、TimesTenにより数値の優先順位が最も高い引数が決定されます。比較の前に、残りの引数は暗黙的にそのデータ型に変換され、そのデータ型が戻されます。
最初のExpressionが文字ファミリに属しており、オペランドまたは列がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。オペランドまたは列がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。あるオペランドまたは列がCHARまたはVARCHAR2型で、別のオペランドまたは列がNCHARまたはNVARCHAR2の場合、戻されるデータ型はNVARCHAR2です。
TimesTenでは、文字ファミリのデータ型に対して非空白埋め比較セマンティクスが使用されます。
最初の式が日付ファミリの場合、戻されるデータ型は、最初の式と同じデータ型です。
いずれかの式がNULLの場合、結果はNULLになります。
最初のExpressionが文字ファミリに属しており、オペランドまたは列がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。オペランドまたは列がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。
最大で256個の式を指定できます。
GREATEST関数を使用して、最大値の文字列を戻します。
Command> SELECT GREATEST ('GREAT', 'GREATER', 'GREATEST') FROM dual;
< GREATEST >
1 row found.
GREATEST関数を使用して、最大値の数値式を戻します。この例の場合、数値の優先順位が最も高いデータ型はBINARY_DOUBLEのため、比較の前に各引数は暗黙的にBINARY_DOUBLEに変換され、BINARY_DOUBLEデータ型が戻されます。
Command> SELECT GREATEST (10, 10.55, 10.1D) FROM dual; < 10.5500000000000 > 1 row found.
DESCRIBEコマンドを使用して、戻されるデータ型がBINARY_DOUBLEであることを確認します。
Command> DESCRIBE SELECT GREATEST (10, 10.55, 10.1D) FROM dual;
Prepared Statement:
  Columns:
    EXP                             BINARY_DOUBLE NOT NULL
GREATEST関数を使用して、最大値のDATE式を戻します。DATEおよびTIMESTAMPは、同じ日付ファミリです。
Command> SELECT GREATEST (DATE '2007-09-30',TIMESTAMP '2007-09-30:10:00:00') 
         FROM dual;
< 2007-09-30 10:00:00 >
1 row found.
GREATEST関数を使用して、TT_DATE式およびTT_TIMESTAMP式のリスト内の最大値を戻そうと試みます。TT_DATEとTT_TIMESTAMPは異なる日付サブファミリに属しており、同じ式のリスト内では使用できないため、エラーが戻されます。
Command> SELECT GREATEST (TT_DATE '2007-09-30', 
                          TT_TIMESTAMP '2007-09-30:10:00:00') 
         FROM dual;
2817: Invalid data type TT_TIMESTAMP for argument 2 for function GREATEST
The command failed.
GREATEST関数を使用して、最大値のTT_DATE式を戻します。
Command> SELECT GREATEST (TT_DATE '2007-09-30',
                          TT_DATE '2007-09-29', 
                          TT_DATE '2007-09-28')
         FROM dual;
< 2007-09-30 >
1 row found.
GROUP_ID関数は、GROUP BY句によるSELECT問合せの結果の重複するグループを識別します。この関数は一意のグループに数値0(ゼロ)を戻し、後続の重複するグループ行は1から始まるより大きな数値を受け取ります。GROUP_ID関数は、問合せ結果から重複グループを除外します。重複する値を生成する可能性がある複雑な問合せを行う場合、HAVING GROUP_ID() = 0条件を指定することによって重複する行を除外できます。
例
次の例では、GROUP_IDがどのように一意のグループに0(ゼロ)を戻し、重複グループを識別するために0より大きい数値を戻すのかを示します。次の例では、部門番号、マネージャID、およびマネージャ内の給与合計を出力します。結果の出力は、マネージャおよび部門でROLLUP句を使用してグループ化され、超集合結果を示します。
Command> SELECT department_id as DEPT, manager_id AS MGR, 
           GROUP_ID(), SUM(salary) as SALARY
         FROM employees 
         WHERE manager_id > 146 
         GROUP BY manager_id, ROLLUP(manager_id, department_id) 
         ORDER BY manager_id, department_id;
 
DEPT, MGR, EXP, SALARY
< 80, 147, 0, 46600 >
< <NULL>, 147, 1, 46600 >
< <NULL>, 147, 0, 46600 >
< 80, 148, 0, 51900 >
< <NULL>, 148, 0, 51900 >
< <NULL>, 148, 1, 51900 >
< 80, 149, 0, 43000 >
< <NULL>, 149, 0, 7000 >
< <NULL>, 149, 0, 50000 >
< <NULL>, 149, 1, 50000 >
< 20, 201, 0, 6000 >
< <NULL>, 201, 0, 6000 >
< <NULL>, 201, 1, 6000 >
< 110, 205, 0, 8300 >
< <NULL>, 205, 0, 8300 >
< <NULL>, 205, 1, 8300 >
16 rows found.
GROUPING関数を使用すると、NULLが格納されたNULLなのか小計または総計を示すのかを判断できます。単一の列を引数として使用すると、GROUPINGは、ROLLUPまたはCUBE演算によって生成されたNULL値が出現した場合に1を戻し、小計または総計であることを示します。格納されたNULLなど、その他の値では0(ゼロ)を戻します。
構文
GROUPING関数は、1つのGROUP BY句を含むSELECT文のみに適用できます。選択リストおよびGROUP BY句を含むSELECT問合せのHAVING句で使用できます。GROUPING関数の構文で示される式は、GROUP BY句に含まれる式のいずれかと一致している必要があります。
次の構文は、GROUPINGを使用し、式の結果が集計として示されているかどうかを識別します。
SELECT ... [GROUPING(Expression) ... ] ... GROUP BY ... { RollupCubeClause | GroupingSetsClause } ...
次の構文は、HAVING句内のGROUPINGを使用し、式の結果が集計として示されているのかどうかを識別します。
SELECT ...
  GROUP BY ... { RollupCubeClause | GroupingSetsClause } ...
 HAVING GROUPING(Expression) = 1
パラメータ
| パラメータ | 説明 | 
|---|---|
Expression | 
有効な式の構文。第3章「式」を参照してください。 | 
RollupCubeClause | 
GROUP BY句には、1つ以上のROLLUPまたはCUBE句が含まれることがあります。詳細は、「GROUP BY句」を参照してください。 | 
GroupingSetsClause | 
GROUP BY句には、1つ以上のGROUPING SETS句が含まれることがあります。GROUPING SETS句を使用すると、データベースが戻すデータのグループを明示的に指定できます。詳細は、「GROUPING SETS」を参照してください。 | 
例
次の例では、部門の総計が出現した場合に、GROUPING関数がどのように1を戻すのかを示します。
Command> columnlabels on;
Command> SELECT department_id AS DEPT, 
           GROUPING(department_id) AS DEPT_GRP, SUM(salary) AS SALARY 
         FROM emp_details_view 
         GROUP BY ROLLUP(department_id) 
         ORDER BY department_id; 
DEPT, DEPT_GRP, SALARY
< 10, 0, 4400 >
< 20, 0, 19000 >
< 30, 0, 24900 >
< 40, 0, 6500 >
< 50, 0, 156400 >
< 60, 0, 28800 >
< 70, 0, 10000 >
< 80, 0, 304500 >
< 90, 0, 58000 >
< 100, 0, 51600 >
< 110, 0, 20300 >
< <NULL>, 1, 684400 >
12 rows found.
次の例では、各列にGROUPING関数を使用し、総計のNULL値を判断できることを示します。
Command> SELECT department_id AS DEPT, job_id AS JOB, 
           GROUPING(department_id) AS DEPT_GRP, GROUPING(job_id) AS JOB_GRP, 
           GROUPING_ID(department_id, job_id) AS GRP_ID, SUM(salary) AS SALARY 
         FROM emp_details_view 
         GROUP BY CUBE(department_id, job_id) 
         ORDER BY department_id, job_id, grp_id ASC;
 
DEPT, JOB, DEPT_GRP, JOB_GRP, GRP_ID, SALARY
< 10, AD_ASST, 0, 0, 0, 4400 >
< 10, <NULL>, 0, 1, 1, 4400 >
< 20, MK_MAN, 0, 0, 0, 13000 >
< 20, MK_REP, 0, 0, 0, 6000 >
< 20, <NULL>, 0, 1, 1, 19000 >
< 30, PU_CLERK, 0, 0, 0, 13900 >
< 30, PU_MAN, 0, 0, 0, 11000 >
< 30, <NULL>, 0, 1, 1, 24900 >
...
< 110, AC_ACCOUNT, 0, 0, 0, 8300 >
< 110, AC_MGR, 0, 0, 0, 12000 >
< 110, <NULL>, 0, 1, 1, 20300 >
< <NULL>, AC_ACCOUNT, 1, 0, 2, 8300 >
< <NULL>, AC_MGR, 1, 0, 2, 12000 >
< <NULL>, AD_ASST, 1, 0, 2, 4400 >
< <NULL>, AD_PRES, 1, 0, 2, 24000 >
< <NULL>, AD_VP, 1, 0, 2, 34000 >
< <NULL>, FI_ACCOUNT, 1, 0, 2, 39600 >
< <NULL>, FI_MGR, 1, 0, 2, 12000 >
< <NULL>, HR_REP, 1, 0, 2, 6500 >
< <NULL>, IT_PROG, 1, 0, 2, 28800 >
< <NULL>, MK_MAN, 1, 0, 2, 13000 >
< <NULL>, MK_REP, 1, 0, 2, 6000 >
< <NULL>, PR_REP, 1, 0, 2, 10000 >
< <NULL>, PU_CLERK, 1, 0, 2, 13900 >
< <NULL>, PU_MAN, 1, 0, 2, 11000 >
< <NULL>, SA_MAN, 1, 0, 2, 61000 >
< <NULL>, SA_REP, 1, 0, 2, 243500 >
< <NULL>, SH_CLERK, 1, 0, 2, 64300 >
< <NULL>, ST_CLERK, 1, 0, 2, 55700 >
< <NULL>, ST_MAN, 1, 0, 2, 36400 >
< <NULL>, <NULL>, 1, 1, 3, 684400 >
50 rows found.
GROUPING_ID関数は、ROLLUPまたはCUBE句による集計の正確なGROUP BYレベルを示す数値を戻します。
GROUPING_ID関数は、ROLLUPまたはCUBEからグループ列の順序付けリストを入力として取得し、次のステップでグループIDを計算します。
GROUPING関数をリストの個々の列に適用します。結果は1および0(ゼロ)の集合で、1はROLLUPまたはCUBEで生成された超集合を示します。
引数リストの列と同じ順序でこれらの1および0(ゼロ)を配置し、ビット・ベクトルを作成します。
このビット・ベクトルを2進数から10進数に変換します。これがグループIDとして戻されます。
たとえば、CUBE(department_id, job_id)でグループ化すると、戻り値は表4-1のようになります。
表4-1 CUBE(department_id, job_id)でのGROUPING_IDの例
| 集計レベル | ビット・ベクトル | GROUPING_ID | 
|---|---|---|
| 
 部門および職務の通常のグループ行  | 
 0 0  | 
 0  | 
| 
 
  | 
 0 1  | 
 1  | 
| 
 
  | 
 1 0  | 
 2  | 
| 
 総計  | 
 1 1  | 
 3  | 
GROUPING_ID関数を問合せで使用し、サマリー行のみが表示されるように行をフィルタリングできます。HAVING句でGROUPING_ID関数を使用すると、総計および小計を含む行のみに出力を制限できます。これは、GROUPING_ID関数の比較を追加して、結果がHAVING句で0(ゼロ)よりも大きくなるときに実行できます。
構文
GROUPING_ID関数は、GROUP BY句、GROUPING関数、およびROLLUP句、CUBE句またはGROUPING SETS句のいずれかを含むSELECT文にのみ適用できます。選択リストおよびSELECT問合せのHAVING句で使用できます。
GROUPING_ID(Expression [, Expression ]...)
例
次の例では、GROUPING_ID関数にHAVING句のフィルタがあり、戻り値は0(ゼロ)以上になります。小計または総計のいずれかを含まない行は除外されます。次の例では、グループID1で識別される部門の小計、グループID2の職務IDの小計、およびグループID3の総計を示します。
Command> SELECT department_id AS DEPT, job_id AS JOB, 
           GROUPING_ID(department_id, job_id) AS GRP_ID, 
           SUM(salary) AS SALARY 
         FROM emp_details_view 
         GROUP BY CUBE(department_id, job_id) 
         HAVING GROUPING_ID(department_id, job_id) > 0 
         ORDER BY department_id, job_id, grp_id ASC;
 
DEPT, JOB, GRP_ID, SALARY
< 10, <NULL>, 1, 4400 >
< 20, <NULL>, 1, 19000 >
< 30, <NULL>, 1, 24900 >
< 40, <NULL>, 1, 6500 >
< 50, <NULL>, 1, 156400 >
< 60, <NULL>, 1, 28800 >
< 70, <NULL>, 1, 10000 >
< 80, <NULL>, 1, 304500 >
< 90, <NULL>, 1, 58000 >
< 100, <NULL>, 1, 51600 >
< 110, <NULL>, 1, 20300 >
< <NULL>, AC_ACCOUNT, 2, 8300 >
< <NULL>, AC_MGR, 2, 12000 >
< <NULL>, AD_ASST, 2, 4400 >
< <NULL>, AD_PRES, 2, 24000 >
< <NULL>, AD_VP, 2, 34000 >
< <NULL>, FI_ACCOUNT, 2, 39600 >
< <NULL>, FI_MGR, 2, 12000 >
< <NULL>, HR_REP, 2, 6500 >
< <NULL>, IT_PROG, 2, 28800 >
< <NULL>, MK_MAN, 2, 13000 >
< <NULL>, MK_REP, 2, 6000 >
< <NULL>, PR_REP, 2, 10000 >
< <NULL>, PU_CLERK, 2, 13900 >
< <NULL>, PU_MAN, 2, 11000 >
< <NULL>, SA_MAN, 2, 61000 >
< <NULL>, SA_REP, 2, 243500 >
< <NULL>, SH_CLERK, 2, 64300 >
< <NULL>, ST_CLERK, 2, 55700 >
< <NULL>, ST_MAN, 2, 36400 >
< <NULL>, <NULL>, 3, 684400 >
31 rows found.
ある文字列が別の文字列内に検出された場合に、その最初の位置を識別します。サブストリングが文字列内で検出されない場合は0(ゼロ)が返されます。返される位置は、常にSourceExprの開始と関連します。INSTRは、NUMBER型を返します。
パラメータ
INSTRには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
SourceExpr | 
SearchExprの位置を検出するために検索される文字列です。値は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型を含むサポートされた文字データ型になります。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。 | 
SearchExpr | 
文字列SourceExprで検出されるサブストリングです。SearchExprがSourceExprにない場合は、0(ゼロ)が返されます。文字列のいずれかの長さが0(ゼロ)の場合は、NULLが返されます。 | 
m | 
検索を開始する位置です(オプション)。mが0(ゼロ)に指定された場合、結果は0(ゼロ)です。mが正の値の場合、検索はCharExpr2+mから開始されます。mが負の値の場合、検索はCharExpr2の終わりからm文字目で開始されます。 | 
n | 
nには正の値を指定する必要があります。検索結果では、CharExpr1のn番目の出現位置が返されます。 | 
LAST_VALUE関数は分析関数で、順序付けられた値の集合にある最後の値を戻します。
| パラメータ | 説明 | 
|---|---|
Expression | 
サポートされるExpressionsの詳細は、「分析関数」を参照してください。 | 
IGNORE NULLS | 
LAST_VALUEが、集合内の最後のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするにはIGNORE NULLSを指定します。句はオプションです。 | 
OVER (AnalyticClause) | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
説明
集合内の最後の値がNULLの場合、IGNORE NULLSを指定していないかぎり、LAST_VALUEはNULLを戻します。関数が、集合内の最後のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするには、IGNORE NULLSを指定します。
例
LAST_VALUE関数を使用して、給与が最も高い従業員の雇用開始日を各行に戻します。
Command> SELECT last_name, salary, hire_date,
           LAST_VALUE (hire_date) OVER (ORDER BY salary
           ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
         FROM
           (SELECT * FROM employees WHERE department_id = 90 ORDER BY hire_date)
         ORDER BY last_name, salary, hire_date, lv;
< De Haan, 17000, 1993-01-13 00:00:00, 1987-06-17 00:00:00 >
< King, 24000, 1987-06-17 00:00:00, 1987-06-17 00:00:00 >
< Kochhar, 17000, 1989-09-21 00:00:00, 1987-06-17 00:00:00 >
3 rows found.
LEAST関数は、1つ以上の式のリストのうち、最小のものを戻します。
パラメータ
LEASTには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression [,...] | 
最小の式の値を決定するために評価される1つ以上の式のリスト。オペランドまたは列には、数値、文字または日付を指定できます。リスト内の各式は、同じデータ型ファミリから採用する必要があります。 | 
説明
リスト内の各式は、同じデータ型ファミリまたは日付サブファミリから採用する必要があります。データ型ファミリには、数値、文字および日付が含まれます。日付ファミリには、4つのサブファミリ(日付ファミリ、TIMEファミリ、TT_DATEファミリおよびTT_TIMESTAMPファミリ)が含まれます。たとえば、式のリストに数値式と文字式を指定することはできません。同様に、式のリストに日付式とTT_TIMESTAMP式を指定することはできません。
最初のExpressionが数値の場合、TimesTenにより数値の優先順位が最も高い引数が決定されます。比較の前に、残りの引数は暗黙的にそのデータ型に変換され、そのデータ型が戻されます。
最初のExpressionが文字ファミリに属しており、オペランドまたは列がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。オペランドまたは列がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。あるオペランドまたは列がCHARまたはVARCHAR2型で、別のオペランドまたは列がNCHARまたはNVARCHAR2の場合、戻されるデータ型はNVARCHAR2です。
TimesTenでは、文字ファミリのデータ型に対して非空白埋め比較セマンティクスが使用されます。
最初の式が日付ファミリの場合、戻されるデータ型は、最初の式と同じデータ型です。
いずれかの式がNULLの場合、結果はNULLになります。
最初のExpressionが文字ファミリに属しており、オペランドまたは列がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。オペランドまたは列がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。
最大で256個の式を指定できます。
LEAST関数を使用して、最小値の文字列を戻します。
Command> SELECT LEAST ('SMALL','SMALLER','SMALLEST') FROM dual;
< SMALL >
1 row found.
LEAST関数を使用して、最小値の数値式を戻します。この例の場合、数値の優先順位が最も高いデータ型はNUMBERのため、比較の前に各引数は暗黙的にNUMBERに変換され、NUMBERデータ型が戻されます。最初に表leastexを記述し、列col1およびcol2に定義されているデータ型を確認します。次に、SELECT * FROM leastexを実行してデータを確認します。最後にLEAST関数を呼び出します。
Command> DESCRIBE leastex;
Table SAMPLEUSER.LEASTEX:
  Columns:
    COL1                            NUMBER (2,1)
    COL2                            TT_BIGINT
1 table found.
(primary key columns are indicated with *)
Command> SELECT * FROM leastex;
< 1.1, 1 >
1 row found.
Command> SELECT LEAST (Col2,Col1) from leastex;
< 1 >
1 row found.
DESCRIBEコマンドを使用して、戻されるデータ型がNUMBERであることを確認します。
Command> DESCRIBE SELECT LEAST (Col2,Col1) FROM leastex;
Prepared Statement:
  Columns:
    EXP                             NUMBER
LEAST関数を使用して、最小値のDATE式を戻します。DATEおよびTIMESTAMPは、同じ日付ファミリです。
Command> SELECT LEAST (DATE '2007-09-17', 
           TIMESTAMP '2007-09-17:10:00:00') FROM dual;
< 2007-09-17 00:00:00 >
1 row found.
LEAST関数を使用して、TT_DATE式およびTT_TIMESTAMP式のリスト内の最小値を戻そうと試みます。TT_DATEとTT_TIMESTAMPは異なる日付サブファミリに属しており、同じ式のリスト内では使用できないため、エラーが戻されます。
Command> SELECT LEAST (TT_DATE '2007-09-17',
           TT_TIMESTAMP '2007-09-17:01:00:00') FROM dual;
2817: Invalid data type TT_TIMESTAMP for argument 2 for function LEAST
The command failed.
LEAST関数を使用して、最小値のTIME式を戻します。
Command> SELECT LEAST (TIME '13:59:59', TIME '13:59:58',
           TIME '14:00:00') FROM dual;
< 13:59:58 >
1 row found.
式内の指定した文字列の長さを返します。LENGTHはNUMBER型を返します。
パラメータ
LENGTHには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
CharExpr | 
長さを返す対象の文字列です。サポートされるCharExprのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。LENGTHおよびLENGTHBは、CLOB、NCLOBおよびBLOBデータ型もサポートします。 | 
説明
LENGTH関数は、CharExprの長さを戻します。LENGTHは、文字セットで定義された文字を使用して長さを計算します。LENGTHBは、文字数ではなくバイト数を使用します。LENGTH4には、UCS4コード・ポイントを使用します。
次の例では、NCLOBデータの長さを判別します。
Command> SELECT nclob_column FROM nclob_content; < Demonstration of the NCLOB data type > 1 row found. Command> SELECT LENGTH(nclob_column) FROM nclob_content; < 36 > 1 row found.
LN関数は、Expressionの自然対数を返します。Expressionの値は0より大きい値です。
パラメータ
LNには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
LOG関数は、Expression1の対数(底Expression2)を返します。底Expression2には、0または1以外の任意の正の値を指定でき、Expression1には任意の正の値を指定できます。
パラメータ
LNには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
Expression2 | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
LOWER関数は、CHAR、NCHAR、VARCHAR2、NVARCHAR2、CLOBまたはNCLOB型の式を小文字に変換します。UPPER関数は、CHAR、NCHAR、VARCHAR2、NVARCHAR2、CLOBまたはNCLOB型の式を大文字に変換します。CHAR型およびVARCHAR2型では、文字セマンティクスがサポートされています。結果のデータ型は式のデータ型と同じです。
LPAD関数は、左側がExpression2の連続文字で埋め込まれたn文字の長さのExpression1を戻します。この関数は、問合せの出力を書式設定する場合に役立ちます。
パラメータ
LPADには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
左側を文字で埋め込むCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1がnより長い場合、LPADでは、nに一致するExpression1の一部分が戻されます。 | 
n | 
LPAD関数で戻される文字の長さ。NUMBER型の整数、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。 | 
Expression2 | 
Expression1の左側を埋め込む連続文字。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。オペランドまたは列には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型を指定できます。 | 
説明
Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。
nが定数の場合、戻されるデータ型の長さはnに等しくなります。それ以外の場合、結果の最大長である8300が戻されます。
Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。
CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型の場合:
Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。nが0(ゼロ)以下の場合も、結果はNULLです。
TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:
Expression1またはExpression2のいずれかがNULLではなく、nが0(ゼロ)以下の場合、結果は空の文字列です。
例
次の例では、20文字になるように左側をピリオドで埋め込んだ、最初の5人の従業員の名前を出力します。
Command> SELECT FIRST 5 LPAD (last_name, 20, '.') 
         FROM employees
         ORDER BY last_name;
< ................Abel >
< ................Ande >
< ............Atkinson >
< ..............Austin >
< ................Baer >
5 rows found.
LPAD関数を使用して、文字列'LPAD Function'の左側を文字列'DEMO-ONLY'と2個の空白で埋め込みます。文字列DEMO-ONLYは、関数によって文字出力合計で定義された回数(3回)繰り返されます。
Command> SELECT LPAD ('LPAD Function', 46, 'DEMO-ONLY  ') FROM dual;
< DEMO-ONLY  DEMO-ONLY  DEMO-ONLY  LPAD Function >
1 row found.
長さ-1を使用してLPAD関数をコールします。NULLが戻されます。
Command> SELECT LPAD ('abc', -1, 'a')  FROM dual;
< <NULL> >
1 row found.
LTRIM関数は、Expression1の左端から、Expression2に含まれるすべての文字を削除します。TimesTenでは、Expression1の最初の文字からスキャンが開始され、Expression2に存在しない文字になるまでExpression2に指定した文字がすべて削除された後、結果が戻されます。
パラメータ
LTRIMには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
切捨ての対象とするCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1が文字リテラルの場合、一重引用符でその文字を囲みます。 | 
Expression2 | 
Expression1の切捨てに使用するオプションの式。Expression2が文字リテラルの場合、一重引用符でその文字を囲みます。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。オペランドまたは列には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型を指定できます。 | 
説明
Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がCLOBまたはNCLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。戻されるデータ型の長さは、Expression1のデータ型の長さに等しくなります。
Expression1がCHAR長セマンティクスで定義されたデータ型の場合、戻される長さはCHAR長セマンティクスで表現されます。
Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。
Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。
Expression1がCHARまたはVARCHAR2型で、Expression2がNCHARまたはNVARCHAR2型の場合、Expression2はLTRIMの実行前にCHARまたはVARCHAR2に変換されます。Expression2の変換は失われる可能性があります。Expression2の切捨て文字がデータベースの文字セットに含まれない場合、問合せにより予期しない結果が発生する可能性があります。
CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型の場合:
Expression1のすべての文字がLTRIM関数により削除された場合、結果はNULLになります。
TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:
Expression1のすべての文字がLTRIM関数により削除された場合、結果は空の文字列になります。
例
LTRIM関数をコールして、左端の'x'および'y'を文字列から削除します。LTRIMは、'xy'というパターンではなく、個々に出現する'x'と'y'を削除します。
Command> SELECT LTRIM ('xxxyyyxyxyLTRIM Example', 'xy') FROM dual;
< LTRIM Example >
1 row found.
LTRIM関数をコールして、SYSDATEからYYYY-MM-DDを削除します。TO_CHARをコールして、SYSDATEをVARCHAR2に変換します。
Command> SELECT LTRIM (TO_CHAR(SYSDATE), '2007-08-21') FROM dual; < 22:54:39 > 1 row found.
LTRIMをコールして、Expression1からすべての文字を削除します。最初の例では、データ型がCHARであるため、NULLが戻されます。2番目の例では、データ型がTT_CHARであるため、空の文字列が戻されます。
Command> CREATE TABLE ltrimtest (col1 CHAR (4), col2 TT_CHAR (4));
Command> INSERT INTO ltrimtest VALUES ('ABBB','ABBB');
1 row inserted.
Command> SELECT LTRIM (col1, 'AB') FROM ltrimtest;
< <NULL> >
1 row found.
Command> SELECT LTRIM (col2, 'AB') FROM ltrimtest;
<  >
1 row found.
引数の値の最大値を検索します(英数字型のASCII比較)。NULL値は無視されます。MAXは、数値、文字およびBINARYデータ型に適用できます。MAXは集計関数で、集計分析関数にもなります。集計関数の詳細は、「集計関数」を参照してください。分析関数の詳細は、「分析関数」を参照してください。
パラメータ
MAXには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
ALL | 
集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。 | 
DISTINCT | 
集計関数の引数から、重複する列の値を削除します。 | 
ROWID | 
TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。ROWID値はROWID擬似列から取得されます。詳細は、「ROWID疑似列」を参照してください。 | 
OVER ([AnalyticClause]) | 
指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。 | 
引数の値の最小値を検索します(英数字型のASCII比較)。NULL値は無視されます。MINは、数値、文字およびBINARYデータ型に適用できます。集計関数の詳細は、「集計関数」を参照してください。MINは、集計分析関数にもなります。分析関数の詳細は、「分析関数」を参照してください。
パラメータ
MINには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
ALL | 
集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。 | 
DISTINCT | 
集計関数の引数から、重複する列の値を削除します。 | 
ROWID | 
TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。ROWID値はROWID擬似列から取得されます。詳細は、「ROWID疑似列」を参照してください。 | 
OVER (AnalyticClause) | 
指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。 | 
説明
GROUP BYが使用されていない空の表でMIN関数を計算すると、MINはNULLを戻します。
空のグループまたはグループ化された空の表(GROUP BYを使用)でMIN関数を計算すると、MINは何も戻しません。
結果のデータ型はソースと同じになります。
問合せでAnalyticClauseを使用しない場合、MINは集計関数として機能します。
Command> SELECT MIN(salary) "Min Salary" FROM employees; MIN SALARY < 2100 >
最初の雇用日を示します。
Command> SELECT MIN(hire_date) "Earliest Hire Date" FROM employees; EARLIEST HIRE DATE < 1987-06-17 00:00:00 > 1 row found.
あるINTEGER式を2番目のINTEGER式で除算した余りを返します。
説明
MODはExpression1をExpression2で除算した余りを返します。
Expression2が0の場合、MODはExpression1を返します。
Expression1かExpression2のいずれかがNULLであれば、MODはNULLを返します。
MODはバイナリ算術演算として扱われるため、戻り型は第1章「データ型」に説明する規則に従って決まります。
MOD関数の動作は、2つのオペランドのいずれかが負の場合には古典数学のモジュール関数とは異なる動作をします。次の表に、その違いを示します。
| M | N | 古典数学のモジュール関数 | MOD(M,N) | 
|---|---|---|---|
11 | 
3 | 
2 | 
2 | 
11 | 
-3 | 
-1 | 
2 | 
-11 | 
3 | 
1 | 
-2 | 
-11 | 
-3 | 
-2 | 
-2 | 
次の例では、式mの値が式nの値で割り切れるかどうかをテストします。
SELECTm,nFROM test WHERE MOD(m,n) = 0;
MONTHS_BETWEEN関数は、日付date1とdate2の間の月数を戻します。
パラメータ
MONTHS_BETWEENには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
date1 | 
日時値、または日時値に変換可能な任意の値。 | 
date2 | 
日時値、または日時値に変換可能な任意の値。 | 
説明
入力パラメータは、TIMEまたはTT_TIMEデータ型を除き、サポートされているすべての日時データ型の組合せになります。サポートされている日時データ型は、DATE、TIMESTAMP、TT_DATE、TT_TIMESTAMP、ORA_DATEおよびORA_TIMESTAMPです。すべての日時データ型の詳細は、第1章「データ型」を参照してください。
戻りデータ型は、NUMBERです。
MONTHS_BETWEENは、日付date1とdate2の間の月数を戻します。
date1がdate2より後の日付の場合、結果は正の値になります。
date1がdate2より前の日付の場合、結果は負の値になります。
date1およびdate2が、両方とも月の同じ日または月の最終日の場合、戻される結果は整数になります。それ以外の場合、戻される結果は、date1とdate2のパラメータの時刻部分の差を考慮した1か月31日を基準とする小数になります。
例
次の例では、2つの日付間の月数を計算します。
Command> SELECT MONTHS_BETWEEN(DATE '1995-02-02', DATE '1995-01-01') 
           AS Months FROM dual;
 
MONTHS
< 1.03225806451613 >
1 row found. 
Command> SELECT MONTHS_BETWEEN(DATE '2010-02-02', DATE '2010-10-01') "Months"
         FROM dual;
 
MONTHS
< -7.96774193548387 >
1 row found.
 
次のコマンドでは、CASTを使用し、CHAR文字列を明示的にタイムスタンプに変換します。最初の結果は整数に丸められます。
Command> SELECT ROUND ( MONTHS_BETWEEN (CAST ('2010-04-15 14:13:52' 
           AS TIMESTAMP), CAST ('2000-12-31 00:00:00' AS TIMESTAMP))), 
           MONTHS_BETWEEN (CAST ('2010-04-15 14:13:52' AS TIMESTAMP), 
           CAST ('2000-12-31 00:00:00' AS TIMESTAMP)) 
         FROM dual;
< 112, 111.502998805257 >
1 row found.
NLS_CHARSET_IDは、文字セット名に対応する文字セットID番号を戻します。
| 
 ノート: サポートされている文字セットの完全なリストは、『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされている文字セットに関する説明を参照してください。 | 
パラメータ
NLS_CHARSET_IDには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
String | 
入力文字列の引数は、文字セットを表す実行時のVARCHAR2値です。この文字列では、大文字と小文字は区別されません。
入力文字列がTimesTenの有効な文字セットに対応している場合は関連する文字セットID番号が戻され、対応していない場合は 
  | 
例
次の例では、文字セットUS7ASCIIの文字セットID番号を戻します。
Command> SELECT nls_charset_id('US7ASCII') FROM dual;
< 1 >
1 row found.
NLS_CHARSET_IDの結果をNLS_CHARSET_NAMEへの入力として使用する、次の項「NLS_CHARSET_NAME」の例も参照してください。
NLS_CHARSET_NAMEは、文字セットID番号に対応する文字セット名を戻します。
| 
 ノート: サポートされている文字セットの完全なリストは、『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされている文字セットに関する説明を参照してください。 | 
パラメータ
NLS_CHARSET_NAMEには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Number | 
文字セットIDを表す番号。番号がTimesTenの有効な文字セットIDに対応していない場合、NULLが戻されます。 | 
例
次の例では、文字セットID番号1に対応するデータベース文字セットを戻します。
Command> SELECT nls_charset_name(1) FROM dual; < US7ASCII > 1 row found.
次の例では、結果がNLS_CHARSET_NAME関数に指定されるNLS_CHARSET_ID関数内の文字セット名としてCHAR_CSを指定することで、データベース文字セットの名前を判別して、同じ結果を取得します。
SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')) FROM dual;
< US7ASCII >
1 row found.
関連情報は、前の項「NLS_CHARSET_ID」を参照してください。
指定された文字列に対してソート・キー値を戻します。
パラメータ
NLSSORTには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
String | 
Stringを指定すると、NLSSORTによって、Stringをソートするために使用されるソート・キー値が戻されます。Stringにサポートされているデータ型は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBおよびNCLOBです。 | 
['NLS_SORT = SortName'] | 
SortNameは、言語ソート順序またはBINARYのいずれかです。このパラメータを省略すると、現在のセッションのデフォルトのソート順序が使用されます。アクセントを区別しないソートの場合は接尾辞-aiを、大/小文字を区別しないソートの場合は-ciをSortNameの末尾に追加します。指定可能な言語のSortName値の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされている言語ソートに関する説明を参照してください。 | 
例
次の例は、文字列のバイナリ値ではなく、言語ソート順序に基づいたソートおよび比較の処理を示しています。また、この例は、ALTER SESSION... SET NLS_SORT文を使用することによって同じ結果が得られることも示しています。
Command> CREATE TABLE nsortdemo (name VARCHAR2 (15));
Command> INSERT INTO nsortdemo VALUES ('Gaardiner');
1 row inserted.
Command> INSERT INTO nsortdemo VALUES ('Gaberd');
1 row inserted.
Command> INSERT INTO nsortdemo VALUES ('Gaasten');
1 row inserted.
Command> -- Perform Sort
Command> SELECT * FROM nsortdemo ORDER BY name;
< Gaardiner >
< Gaasten >
< Gaberd >
3 rows found.
Command> -- Use function to perform sort
Command> SELECT * FROM nsortdemo ORDER BY NLSSORT (name, 'NLS_SORT = XDanish');
< Gaberd >
< Gaardiner >
< Gaasten >
3 rows found.
Command> --comparison operation
Command> SELECT * FROM nsortdemo where Name > 'Gaberd';
< Gardiner >
1 row found.
Command> -- Use function in comparison operation
Command> SELECT * FROM nsortdemo WHERE NLSSORT (name, 'NLS_SORT = XDanish') >
           NLSSORT ('Gaberd', 'NLS_SORT = XDanish');
< Gaardiner >
< Gaasten >
2 rows found.
Command> -- Use ALTER SESSION to obtain the same results
Command> ALTER SESSION SET NLS_SORT = 'XDanish';
Session altered.
Command> SELECT * FROM nsortdemo ORDER BY name;
< Gaberd >
< Gaardiner >
< Gaasten >
3 rows found.
Command> SELECT * FROM nsortdemo WHERE name > 'Gaberd';
< Gaardiner >
< Gaasten >
2 rows found.
次の例では、言語索引を作成します。
Command> CREATE INDEX danishindex 
         ON nsortdemo (NLSSORT (name, 'NLS_SORT =XDanish'));
Command> INDEXES N%;
Indexes on table USER1.NSORTDEMO:
  DANISHINDEX: non-unique range index on columns:
    NLSSORT(NAME,'NLS_SORT = XDanish')
  1 index found.
1 index found on 1 table.
NULLIFは、2つの式を比較します。値が同じ場合、NULLIFはNULLを戻し、異なる場合は最初の式を戻します。
パラメータ
NULLIFには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
Expression2と等しいかどうかを判断するためにテストされる式。Expression1には、リテラルNULLを指定できません。 | 
Expression2 | 
Expression1と等しいかどうかを判断するためにテストされる式。 | 
説明
両方のパラメータが数値データ型の場合、Timestenは、数値の優先順位が高い方の引数を判断し、残りの引数をこのデータ型に暗黙的に変換して、このデータ型を戻します。パラメータが数値データ型ではない場合、それらのデータ型ファミリは同じである必要があります。
LOBデータ型は、NULLIFでサポートされません。TIMEデータ型は、両方の列がTIMEデータ型の場合のみサポートされます。
NULLIFファンクションは、次のCASE式と論理的に同じです。
CASE WHEN Expression1 = Expression2 THEN NULL ELSE Expression1 END
例
次の例では、入社時から職務が変わった従業員を選択し、job_history表のjob_idとemployees表の現在のjob_idが異なる場合は職務が変わったことがわかります。NULLIFを新旧のjob_idエントリに適用すると、エントリが同じ場合はNULLが戻され、異なる場合は職種を変更した従業員が示されます。
Command> SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID" 
         FROM employees e, job_history j 
         WHERE e.employee_id = j.employee_id 
         ORDER BY last_name, "Old Job ID";
< De Haan, AD_VP >
< Hartstein, MK_MAN >
< Kaufling, ST_MAN >
< Kochhar, AD_VP >
< Kochhar, AD_VP >
< Raphaely, PU_MAN >
< Taylor, SA_REP >
< Taylor, <NULL> >
< Whalen, AD_ASST >
< Whalen, <NULL> >
10 rows found.
数または式をINTERVAL DAY TO SECOND型に変換します。
数または式をINTERVAL YEAR TO MONTH型に変換します。
NVL関数は、NULL値を2番目の値に置き換えます。
パラメータ
NVLには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
値がNULLであるかをテストする式で、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBまたはBLOB式を指定できます。 | 
Expression2 | 
Expression1の値がNULLの場合に使用されるかわりの値で、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBまたはBLOB式を指定できます。 | 
説明
Expression1とExpression2のデータ型には互換性がある必要があります。データ型が異なる場合、可能であればデータ型を暗黙的に変換します。暗黙的に変換できない場合、エラーが戻されます。
次に、データ型を暗黙的に変換する方法について説明します。
Expression1が文字データの場合、Expression2をExpression1と同じデータ型に変換し、Expression1の文字セットのVARCHAR2で結果を戻します。
Expression1が数値の場合、TimesTenでは数値の優先順位が最も高い式が判断され、もう一方の引数がそのデータ型に暗黙的に変換されて、そのデータ型が戻されます。
Expression1がNULLの場合、NVL関数はExpression2を返します。Expression1がNOT NULLの場合、NVL関数はExpression1を返します。
NVL関数は、SELECT、UPDATE、DELETE文のWHERE句またはHAVING句、およびSELECT文のSELECTリストにおいて使用できます。
例
この例では、姓がBで始まる従業員に対して、commission_pctのNULL値を確認し、それらの値を'Not Applicable'に置き換えます。
Command> SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable')
         FROM employees 
         WHERE last_name LIKE 'B%'
         ORDER BY last_name;
< Baer, Not Applicable >
< Baida, Not Applicable >
< Banda, .1 >
< Bates, .15 >
< Bell, Not Applicable >
< Bernstein, .25 >
< Bissot, Not Applicable >
< Bloom, .2 >
< Bull, Not Applicable >
9 rows found.
POWER関数は、BaseのExponent乗を戻します。BaseとExponentには任意の数値を指定できますが、Baseが負数の場合、Exponentは整数である必要があります。
| パラメータ | 説明 | 
|---|---|
Base | 
オペランドまたは列には、任意の数値型を指定できます。POWERにより、この値のExponent乗が戻されます。 | 
Exponent | 
オペランドまたは列には、任意の数値型を指定できます。Baseが負数の場合、Exponentは整数である必要があります。 | 
RANK関数は、値のグループにおける値のランクを計算する分析関数です。
| パラメータ | 説明 | 
|---|---|
QueryPartitionClause | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
OrderByClause | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
説明
戻り型はNUMBERです。
そのランク付け基準に関して同じ値を持つ行は、同じランクになります。TimesTenは連結行の数を連結ランクに追加して、次のランクを計算します。そのため、ランクは連続した数値でない場合があります。
RANKは、ある問合せが戻す他の行について、その問合せが戻す各行のランクを計算します。この計算は、OrderByClauseの式の値に基づいて行われます。
例
RANK関数を使用して、給与や歩合に基づいて部門80の最初の10人の従業員をランク付けします。給与が同じ場合は同じランクになるため、連続しないランクになります。
Command> SELECT first 10 department_id, last_name, salary, commission_pct,
           RANK() OVER (PARTITION BY department_id
           ORDER BY salary DESC, commission_pct) "Rank"
         FROM employees WHERE department_id = 80
         ORDER BY department_id, last_name, salary, commission_pct, "Rank";
< 80, Abel, 11000, .3, 5 >
< 80, Ande, 6400, .1, 31 >
< 80, Banda, 6200, .1, 32 >
< 80, Bates, 7300, .15, 26 >
< 80, Bernstein, 9500, .25, 14 >
< 80, Bloom, 10000, .2, 9 >
< 80, Cambrault, 7500, .2, 23 >
< 80, Cambrault, 11000, .3, 5
< 80, Doran, 7500, .3, 24 >
< 80, Errazuriz, 12000, .3, 3 >
10 rows found.
REPLACEは、指定した文字列の連続文字を別の文字列に置換するか、文字列をすべて削除します。
| パラメータ | 説明 | 
|---|---|
String | 
置換するサブストリングを含むソース文字列。 | 
SearchString | 
元の文字列で置換される文字列。SearchStringがNULLの場合、元のStringが変更されずに戻されます。 | 
ReplacementString | 
元の文字列に出現するすべての検索文字列の置換に使用される文字列。ReplacementStringが省略されているかNULLの場合、出現するすべてのSearchStringはソースStringから削除されます。 | 
説明
REPLACEは、出現するすべてのSearchStringをソースStringのReplacementStringに置換する文字列を戻します。
String、SearchStringおよびReplacementStringには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型を指定できます。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。BLOBを除く文字ではないすべてのデータ型は、暗黙的に文字列データ型に変換されます。
StringがCHARまたはVARCHAR2の場合、戻される文字列はVARCHAR2データ型です。StringがNCHARまたはNVARCHAR2の場合、戻される文字列はNVARCHAR2データ型です。CLOBまたはNCLOBデータ型では、戻されるデータ型はStringで指定されるデータ型と同じになります。文字セットは、ソースStringと同じになります。
戻される文字列の長さが0(ゼロ)の場合、NULLがOracle Database データ型に戻され、長さ0(ゼロ)の文字列がTimesTenデータ型に戻されます。すべてのデータ型の詳細は、第1章「データ型」を参照してください。
例
次の例では、Canadaのすべての場所を出力し、国コードCAをCanadaに置換して読みやすくします。
Command> SELECT location_id, street_address,
           city, state_province, postal_code,
         REPLACE(country_id, 'CA', 'Canada') 
         FROM LOCATIONS 
         WHERE country_id LIKE 'CA';
< 1800, 147 Spadina Ave, Toronto, Ontario, M5V 2L7, Canada >
< 1900, 6092 Boxwood St, Whitehorse, Yukon, YSW 9T2, Canada >
2 rows found.
書式モデルfmtで指定された単位に丸められた日付を戻します。戻される値の型はDATEです。fmtを指定しない場合、dateは最も近い日に丸められます。
パラメータ
ROUND(日付)には、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Date | 
丸められる日付。日付値に解決される必要があります。
 
  | 
[,Fmt] | 
書式モデルの丸め単位。fmtには、定数またはパラメータのいずれかを指定します。 | 
説明
日付には、DATEまたはTIMESTAMP型を指定できます。戻されるデータ型はDATEです。
データ型TT_DATEおよびTT_TIMESTAMPはサポートされていません。
fmtでの使用がサポートされる書式モデルの詳細は、「ROUNDおよびTRUNC日付関数の書式モデル」を参照してください。
例
書式モデルとして'YEAR'を指定し、Dateを翌年の最初の日に丸めます。
Command> SELECT ROUND (DATE '2007-08-25','YEAR') FROM dual; < 2008-01-01 00:00:00 > 1 row found.
Fmtを省略します。Dateは時刻13:00:00を含むTIMESTAMP型として指定します。Dateは最も近い日に丸められます。
Command> SELECT ROUND (TIMESTAMP '2007-08-16 13:00:00') FROM dual; < 2007-08-17 00:00:00 > 1 row found.
ROUND関数は、小数点の右側がExpression2の桁数に丸められたExpression1を戻します。
パラメータ
ROUNDには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
オペランドまたは列には、任意の数値型を指定できます。 | 
Expression2 | 
何桁に丸めるかを示すオペランドまたは列。負数を指定すると、小数点の左側のその桁を丸めることができます。Expression2を省略した場合、Expression1は小数部が0(ゼロ)桁になるように丸められます。この式は整数である必要があります。 | 
説明
Expression2を省略した場合、戻されるデータ型はExpression1の数値データ型と同じになります。
Expression2を指定した場合、戻されるデータ型は、最大の精度およびスケールを持つNUMBERです。
Expression1がBINARY_FLOATまたはBINARY_DOUBLE型の場合、Expression1の値は、最も近い偶数値に丸められます。それ以外の場合、Expression1の値は、0(ゼロ)から遠い方に丸められます(つまり、x.5が正数の場合はx+1に、x.5が負数の場合はx-1に丸められます)。
例
小数点の右側が2桁となるように数値を丸めます。
Command> SELECT ROUND (15.5555,2) FROM dual; < 15.56 > 1 row found.
Expression2に負数を指定して小数点の左側で数値を丸めます。
Command> SELECT ROUND (15.5555,-1) FROM dual; < 20 > 1 row found.
浮動小数点数を丸めます。浮動小数点数は、最も近い偶数値に丸められます。NUMBER型の式を丸める場合(正数の場合は値が切り上げられる)と比較してください。
Command> SELECT ROUND (1.5f), ROUND (2.5f) FROM dual; < 2.00000000000000, 2.00000000000000 > 1 row found. Command> SELECT ROUND (1.5), ROUND (2.5) FROM dual; < 2, 3 > 1 row found.
ROW_NUMBER関数は分析関数で、OrderByClauseに指定された行の、1から始まる順序シーケンスで、この関数が適用される各行(パーティションの各行、または問合せが戻す各行)に一意の数値を割り当てます。
| パラメータ | 説明 | 
|---|---|
QueryPartitionClause | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
OrderByClause | 
構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。 | 
説明
ROWNUM擬似列は、表や結合処理された行の集合からTimesTenが行を選択する順序を示す番号を戻します。その一方、分析関数であるROW_NUMBERは、番号を割り当てる前に問合せの結果の順序付けを強力にサポートします。
指定された範囲のROW_NUMBER値を取得する問合せ内に、ROW_NUMBERを使用した副問合せをネストすることで、内側の問合せの結果から正確な行のサブセットを得ることができます。一貫した結果を戻すには、問合せで決定的なソート順序を使用する必要があります。
戻りデータ型は、NUMBERです。
例
ROW_NUMBERを使用すると、各部門の最も支給額の高い上位3人の従業員が戻されます。従業員が3人未満の部門については、3行未満の行が戻されます。
Command> SELECT FIRST 10 department_id, first_name, last_name, salary
         FROM
          (SELECT department_id, first_name, last_name, salary, ROW_NUMBER()
             OVER (PARTITION BY department_id ORDER BY salary desc) rn
           FROM employees )
         WHERE rn <= 3
         ORDER BY department_id, salary DESC, last_name;
< 10, Jennifer, Whalen, 4400 >
< 20, Michael, Hartstein, 13000 >
< 20, Pat, Fay, 6000 >
< 30, Den, Raphaely, 11000 >
< 30, Alexander, Khoo, 3100 >
< 30, Shelli, Baida, 2900 >
< 40, Susan, Mavris, 6500 >
< 50, Adam, Fripp, 8200 >
< 50, Matthew, Weiss, 8000 >
< 50, Payam, Kaufling, 7900 >
10 rows found.
RPAD関数は、Expression2を必要な数だけ繰り返して右側を埋め込んだn文字の長さのExpression1を戻します。この関数は、問合せの出力を書式設定する場合に役立ちます。
パラメータ
RPADには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
右側を文字で埋め込むCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1がnより長い場合、RPADでは、nに一致するExpression1の一部分が戻されます。 | 
n | 
RPAD関数で戻される文字の長さ。NUMBER型の整数、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。 | 
Expression2 | 
Expression1の右側を文字で埋め込むCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。 | 
説明
Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。
nが定数の場合、戻されるデータ型の長さはnに等しくなります。それ以外の場合、結果の最大長である8300が戻されます。
Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。
CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型の場合:
Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。nが0(ゼロ)以下の場合も、結果はNULLです。
TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:
Expression1またはExpression2のいずれかがNULLではなく、nが0(ゼロ)以下の場合、結果は空の文字列です。
例
employees表のfirst_nameとlast_nameを連結します。RPAD関数をコールして、右側が空白文字で埋め込まれた長さ12のfirst_nameを戻し、もう一度RPADをコールして右側が空白文字で埋め込まれた長さ12のlast_nameを戻します。先頭の5行を選択します。
Command> SELECT FIRST 5 CONCAT (RPAD (first_name,12),
           RPAD (last_name,12)) FROM employees
              ORDER BY first_name, last_name;
< Adam        Fripp        >
< Alana       Walsh        >
< Alberto     Errazuriz    >
< Alexander   Hunold       >
< Alexander   Khoo         >
5 rows found.
RPAD関数をコールして、右側がドット文字('.')で埋め込まれた長さ20のlast_nameを戻します。employees表を使用して、先頭の5行を選択します。
Command> SELECT FIRST 5 RPAD (last_name,20,'.') FROM employees
           ORDER BY last_name;
< Abel................ >
< Ande................ >
< Atkinson............ >
< Austin.............. >
< Baer................ >
5 rows found.
RTRIM関数は、Expression1の右端から、Expression2に含まれるすべての文字を削除します。TimesTenでは、Expression1の最後の文字から逆方向にスキャンが開始され、Expression2に存在しない文字になるまでExpression2に指定した文字がすべて削除された後、結果が戻されます。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
切捨ての対象とするCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1が文字リテラルの場合、引用符でその文字を囲みます。 | 
Expression2 | 
Expression1の切捨てに使用するオプションの式。Expression2が文字リテラルの場合、一重引用符でその文字を囲みます。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。オペランドまたは列には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型を指定できます。 | 
説明
Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がCLOBまたはNCLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。戻されるデータ型の長さは、Expression1のデータ型の長さに等しくなります。
Expression1がCHAR長セマンティクスで定義されたデータ型の場合、戻される長さはCHAR長セマンティクスで表現されます。
Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。
Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。
Expression1がCHARまたはVARCHAR2型で、Expression2がNCHARまたはNVARCHAR2型の場合、Expression2はRTRIMの実行前にCHARまたはVARCHAR2に変換されます。Expression2の変換は失われる可能性があります。Expression2の切捨て文字がデータベースの文字セットに含まれない場合、問合せにより予期しない結果が発生する可能性があります。
CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBおよびNCLOB型の場合:
Expression1のすべての文字がRTRIM関数により削除された場合、結果はNULLになります。
TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:
Expression1のすべての文字がRTRIM関数により削除された場合、結果は空の文字列になります。
例
次の例では、表rtrimtestのcol1から後続の空白を削除します。
Command> CREATE TABLE rtrimtest (col1 VARCHAR2 (25));
Command> INSERT INTO rtrimtest VALUES ('abc     ');
1 row inserted.
Command> SELECT * FROM rtrimtest;
< abc      >
1 row found.
Command> SELECT RTRIM (col1) FROM rtrimtest;
< abc >
1 row found.
RTRIM関数をコールして、右端の'x'および'y'を文字列から削除します。RTRIMは、'xy'というパターンではなく、個々に出現する'x'と'y'を削除します。
Command> SELECT RTRIM ('RTRIM Examplexxxyyyxyxy', 'xy') FROM dual;
< RTRIM Example >
1 row found.
RTRIMをコールして、Expression1からすべての文字を削除します。最初の例では、データ型がCHARであるため、NULLが戻されます。2番目の例では、データ型がTT_CHARであるため、空の文字列が戻されます。
Command> CREATE TABLE rtrimtest (col1 CHAR (4), col2 TT_CHAR (4));
Command> INSERT INTO rtrimtest VALUES ('BBBA', 'BBBA');
1 row inserted.
Command> SELECT RTRIM (col1, 'AB') FROM rtrimtest;
< <NULL> >
1 row found.
Command> SELECT RTRIM (col2, 'AB') FROM rtrimtest;
<  >
1 row found.
SIGN関数は、Expressionの符号を戻します。
説明
ExpressionがNUMBER型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。それ以外の場合、戻されるデータ型はTT_INTEGERです。
バイナリの浮動小数点数ではない数値型の場合、符号は次のようになります。
-1: Expressionの値が0より小さい場合
0: Expressionの値が0の場合
1: Expressionの値が0より大きい場合
浮動小数点数(BINARY_FLOATおよびBINARY_DOUBLE)の場合、このファンクションは数値の符号ビットを戻します。符号ビットは次のようになります。
-1: Expressionの値が0より小さい場合
+1: Expressionの値が0以上、またはExpressionの値がNaNに等しい場合
例
これらの例では、様々なデータ型を使用してSIGN関数の使用方法を具体的に示します。作成済の表signexに、異なるデータ型の列が定義されています。まず、表signexを記述し、各列のデータ型を確認します。次に、各列を選択してそれぞれの列の値を取得します。SIGN関数を使用して列の符号を戻します。
Command> DESCRIBE signex;
Table SAMPLEUSER.SIGNEX:
  Columns:
    COL1                            TT_INTEGER
    COL2                            TT_BIGINT
    COL3                            BINARY_FLOAT
    COL4                            NUMBER (3,2)
1 table found.
(primary key columns are indicated with *)
Command> SELECT col1 FROM signex;
< 10 >
< -10 >
< 0 >
3 rows found.
Command> SELECT SIGN (col1) FROM signex;
< 1 >
< -1 >
< 0 >
3 rows found.
Command> SELECT col2 FROM signex;
< 0 >
< -3 >
< 0 >
3 rows found.
Command> SELECT SIGN (col2) FROM signex;
< 0 >
< -1 >
< 0 >
3 rows found.
Command> SELECT col3 FROM signex;
< 3.500000 >
< -3.560000 >
< NAN >
3 rows found.
Command> SELECT SIGN (col3) FROM signex;
< 1 >
< -1 >
< 1 >
3 rows found.
Command> SELECT col4 FROM signex;
< 2.2 >
< -2.2 >
< 0 >
3 rows found.
Command> SELECT SIGN (col4) FROM signex;
< 1 >
< -1 >
< 0 >
3 rows found.
SIN関数は、Expressionのサイン(ラジアンで表された角度)を返します。
パラメータ
SINには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
SINH関数は、Expressionのハイパボリック・サインを返します。
パラメータ
SINHには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
SOUNDEX関数は、文字列の音声シグネチャを判別し、発音が類似した文字列の比較を可能にします。SOUNDEXを使用すると、綴りが異なっても発音が類似した英単語を比較できます。
| パラメータ | 説明 | 
|---|---|
InputString | 
有効な値は、ORAおよびTTバリアントの付いたCHAR、VARCHAR2、NCHARおよびNVARCHAR2とCLOBおよびNCLOBです。データ型がCLOBまたはNCLOBの場合、TimesTenは結果を戻す前に暗黙的な変換を実行します。 | 
説明
英数字の文字列を、文字列の最初の文字で始まり3つの数字が続く4文字のコードに変換します。
音声表現については、『The Art of Computer Programming, Volume 3: Sorting and Searching』(Donald E. Knuth著)で次のように定義されています。
文字列の最初の文字を残し、A、E、I、O、Uの文字が出てきた場合にはすべて削除します。文字の処理で大文字と小文字は区別されません。
H、WおよびYが出てきた場合には、すべて削除します。
残った2文字目以降の文字に対し、次のように数値を割り当てます。
B, F, P, V = 1 C, G, J, K, Q, S, X, Z = 2 D, T = 3 L = 4 M, N = 5 R = 6
2つ以上の同じ数字を含む文字が元の名前内(ステップ1実行前の名前)で隣接している場合は、数字を1つ残してすべて削除します。
結果の最初の4文字を戻します(結果が4文字より少ない場合は'0'を埋め込みます)。
InputStringにsoundexコードを作成できない場合、この関数はNULLを戻します。たとえば、InputStringに英字が含まれていない場合は、NULLが戻されます。
入力型と出力型のマッピング:
| 入力型 | 出力型 | 
|---|---|
VARCHAR2(x)、CHAR、CLOB | 
VARCHAR2(4) | 
TT_CHAR(x)、TT_VARCHAR(x) | 
TT_VARCHAR(4) | 
NVARCHAR2(x)、NCHAR(x)、NCLOB | 
NVARCHAR2(4) | 
TT_NCHAR(x)、TT_NVARCHAR(x) | 
TT_NVARCHAR(4) | 
例
SOUNDEX関数を使用して、姓が'Taylor'である従業員の音声シグネチャを戻します。
Command> SELECT last_name, first_name, SOUNDEX (last_name)
         FROM employees where last_name = 'Taylor';
< Taylor, Jonathon, T460 >
< Taylor, Winston, T460 >
2 rows found.
この関数を再度呼び出して、文字列'Tailor'の音声シグネチャを戻します。この関数の3回目の呼出しを行い、姓の音声が文字列'Tailor'に類似した各従業員の姓名を戻します。
Command> SELECT SOUNDEX ('Tailor') FROM dual;
< T460 >
1 row found.
Command> SELECT last_name, first_name FROM employees WHERE SOUNDEX (last_name) = 
           SOUNDEX ('Tailor');
< Taylor, Jonathon >
< Taylor, Winston >
2 rows found.
SQRT関数は、Expressionの平方根を戻します。
説明
ExpressionがNUMBER型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。ExpressionがBINARY_FLOAT型の場合、戻されるデータ型はBINARY_FLOATです。それ以外の場合、戻されるデータ型はBINARY_DOUBLEです。
ExpressionがNUMBER型の場合、Expressionの値には負数を指定できません。
Expressionがバイナリの浮動小数点数(BINARY_FLOATまたはBINARY_DOUBLE)に解決される場合は、次のようになります。
Expressionの値が0以上の場合、結果は正数です。
Expressionの値が-0の場合、結果は-0です。
Expressionの値が0より小さい場合、結果はNaNです。
ソース文字列のサブストリングを表す文字列を返します。返されたサブストリングは、指定された文字数で、指定された開始点から始まり、文字列の開始または終了のいずれかに関連します。
パラメータ
SUBSTRには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Source | 
この関数がサブストリングを返す対象の文字列です。値には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型などのサポートされている文字データ型を指定できます。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。
  | 
m | 
サブストリングを開始する位置です。mが正の値の場合、返される文字列の最初の文字は、charで指定される文字列の最初からm文字目になります。mが負の値の場合、文字列の最後からm文字目になります。ABS(m)が文字列の長さを超える場合は、NULL値が返されます。 | 
n | 
サブストリングに含まれる文字数です。nが省略された場合、charで指定した文字列の終わりまでのすべての文字が返されます。nが1より小さいか、char、mまたはnがNULLの場合、NULLが返されます。 | 
例
employeesの先頭の5行で、last_nameの最初の3文字を選択します。
SELECT FIRST 5 SUBSTR(last_name,1,3) FROM employees; < Kin > < Koc > < De > < Hun > < Ern > 5 rows found.
employeesの先頭の5行で、last_nameの最後の5文字を選択します。
SELECT FIRST 5 SUBSTR(last_name,-5,5) FROM employees; < <NULL> > < chhar > < Haan > < unold > < Ernst > 5 rows found.
引数の値の合計を計算します。NULL値は無視されます。SUMは集計関数です。SUMは、集計分析関数にもなります。集計関数の詳細は、「集計関数」を参照してください。分析関数の詳細は、「分析関数」を参照してください。
パラメータ
SUMには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
ALL | 
集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。 | 
DISTINCT | 
集計関数の引数から、重複する列の値を削除します。 | 
OVER ([AnalyticClause]) | 
指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。 | 
説明
GROUP BYが使用されていない空の表でSUM関数を計算すると、SUMはNULLを戻します。
空のグループまたはグループ化された空の表(GROUP BYを使用)でSUM関数を計算すると、SUMは何も戻しません。
ソースがTT_TINYINT、TT_SMALLINTまたはTT_INTEGERの場合、結果のデータ型はTT_BIGINTです。
ソースがNUMBERの場合、結果のデータ型は精度とスケールが定義されていないNUMBERになります。
その他のすべてのデータ型の場合、結果のデータ型はソースと同じになります。
問合せでAnalyticClauseを使用しない場合、SUMは集計関数として機能します。
DISTINCTおよびAnalyticClauseを指定する場合は、QueryPartitionClauseのみを指定できます。OrderByClauseおよびWindowingClauseは指定できません。
現在のセッションに関する情報を戻します。
戻り値のデータ型はVARCHAR2です。
パラメータ
SYS_CONTEXTには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
namespace | 
値: USERENV
他の値の場合には、  | 
parameter | 
サポートされる値は、次のとおりです。
  | 
length | 
長さは1から4000までのバイト値です。 | 
parameterに対してサポートされる値の説明は、次のとおりです。
| パラメータ | 説明 | 
|---|---|
ACTION | 
モジュール内の位置(アプリケーション名)を示し、OCIで設定します。 | 
AUTHENTICATION_METHOD | 
次のタイプのユーザーに対する認証方法を戻します。
  | 
CLIENT_INFO | 
OCIを介してアプリケーションによって格納できるユーザー・セッション情報を返します。 | 
CURRENT_SCHEMA | 
現在アクティブなデータベース・スキーマの名前。この名前は、アクティブな任意の定義者権限オブジェクトの所有者を反映するよう、セッション中に変更される場合があります。ビュー定義の本体で直接使用すると、そのビューを使用しているSQL文の実行時に使用されるデフォルトのスキーマが返されます。SQL文で使用されるビューは、定義者権限を持つとみなされません。
 
  | 
CURRENT_USER | 
現在アクティブな権限を持つデータベース・ユーザー名。この名前は、アクティブな任意の定義者権限オブジェクトの所有者を反映するよう、セッション中に変更される場合があります。定義者権限オブジェクトがアクティブでない場合、CURRENT_USERはSESSION_USERと同じ値を戻します。ビュー定義の本体で直接使用すると、そのビューを使用しているSQL文を実行しているユーザーが返されます。SQL文で使用されるビューは、定義者権限を持つとみなされません。 | 
CURRENT_USERID | 
現在アクティブな権限を持つデータベース・ユーザーの識別子。 | 
IDENTIFICATION_TYPE | 
データベースでユーザーが作成された方法を戻します。特に、CREATE/ALTER USER構文に、IDENTIFIED句が反映されます。次のリストに、ユーザーの作成中に使用された構文と戻される識別タイプを示します。
  | 
LANG | 
既存の'LANGUAGE'パラメータより短い形式の、言語名のISO略称。 | 
LANGUAGE | 
セッションで現在使用中の言語と地域、およびデータベース文字セット。書式は次のとおりです。
 
  | 
MODULE | 
OCIを介して設定されるアプリケーション名(モジュール)。 | 
NLS_SORT | 
バイナリ・ソートまたは言語ソート。 | 
SESSION_USER | 
ログオン時のデータベース・ユーザー名。この値はセッション中を通して変更されません。 | 
SESSION_USERID | 
ログオン時のデータベース・ユーザーの識別子。 | 
SID | 
現在の接続の接続ID。 | 
書式YYYY-MM-DD HH:MI:SSで日付を戻します。この日付は、ローカルの現在の日時を表し、文を実行したシステムによって決定されます。
説明
SYSDATEおよびGETDATEの機能は同じです。SYSDATEは、Oracle Database構文と互換性があります。GETDATEはMicrosoft SQLサーバー構文と互換性があります。
SYSDATEとGETDATEに引数はありません。DATE値を戻します。
SYSDATEまたはGETDATEの値は、実行時にのみ検索されます。
日付に対する変更(たとえば、異なるタイムゾーンやサマータイムの組込みなど)は、システム・レベルで実行する必要があります。SYSDATEまたはGETDATEを使用して日付を変更することはできません。
SYSDATE関数とGETDATE関数はDATEデータ型を戻します。DATEの書式は'YYYY-MM-DD HH:MI:SS'です。
SYSDATEとGETDATEは組込み関数で、日付式を使用しているところで使用できます。これらは、INSERT...SELECTの選択リスト、WHERE句、挿入値に使用できます。SUMまたはAVG集計(オペランドは数値である必要があります)、COUNT集計(列名が必要です)では使用できません。
SYSDATEとGETDATEは、単一のSQL文では、同じDATE値を戻します。
TT_SYSDATEリテラルおよびORA_SYSDATEリテラルがサポートされています。TT_SYSDATEは、TT_TIMESTAMPデータ型を戻します。ORA_SYSDATEはDATEデータ型を戻します。
例
この例では、SYSDATEを呼び出して、表内のすべての行に対して同じ日付と時刻を戻します。
Command> SELECT SYSDATE FROM dual; < 2006-09-03 10:33:43 > 1 row found.
この例では、SYSDATEを呼び出して、現在の日付と時刻を列datecolに挿入します。
Command> CREATE TABLE t (datecol DATE); Command> INSERT INTO t VALUES (SYSDATE); 1 row inserted. Command> SELECT * FROM t; < 2006-09-03 10:35:50 > 1 row found.
この例では、GETDATE表の新しい行それぞれに同じ日付の値を挿入します。ただし、問合せの実行には数秒かかります。
INSERT INTO t1 SELECT GETDATE(), col1 FROM t2 WHERE ...;
TO_CHARをSYSDATEともに使用して、表dualから日付を戻します。
Command> SELECT TO_CHAR (SYSDATE) FROM dual; < 2006-09-03 10:56:35 > 1 row found.
この例では、TT_SYSDATEを呼び出してTT_TIMESTAMPデータ型を戻してから、ORA_SYSDATEを呼び出してDATEデータ型を戻します。
Command> SELECT tt_sysdate FROM dual; < 2006-10-31 20:02:19.440611 > 1 row found. Command> SELECT ora_sysdate FROM dual; < 2006-10-31 20:02:30 > 1 row found.
TAN関数は、Expressionのタンジェント(ラジアンで表された角度)を返します。
パラメータ
TANには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
TANH関数は、Expressionのハイパボリック・タンジェントを返します。
パラメータ
TANHには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression | 
オペランドまたは列は、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。 | 
TIMESTAMPADD関数は、指定された時間隔数をタイムスタンプに加算し、変更されたタイムスタンプを戻します。
パラメータ
TIMESTAMPADDには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Interval | 
指定された時間隔。リテラルとして表す必要があります。説明セクションに有効な値を示します。 | 
IntegerExpression | 
TT_BIGINTに対して評価する式。 | 
TimestampExpression | 
日時式。有効なデータ型は、ORA_DATE、ORA_TIMESTAMP、TT_DATEおよびTT_TIMESTAMPです。(別名のDATEおよびTIMESTAMPデータ型も有効です)。TT_TIMEはサポートされていません。 | 
説明
Intervalに有効な値は、次のとおりです。
SQL_TSI_FRAC_SECOND
SQL_TSI_SECOND
SQL_TSI_MINUTE
SQL_TSI_HOUR
SQL_TSI_DAY
SQL_TSI_WEEK
SQL_TSI_MONTH
SQL_TSI_QUARTER
SQL_TSI_YEAR
SQL_TSI_FRAC_SECONDは、10億分の1秒単位で表されます。
戻り型は、元のデータ型と同じです。たとえば、式がTIMESTAMP型の場合、結果のデータ型はTIMESTAMPになります。正数のタイムスタンプ式(0001-01-01)のみ、問合せと結果の両方で使用できます。TT_DATEおよびTT_TIMESTAMPでは、データ型の開始範囲が1753-01-01であるため、タイムスタンプ式はこの日付と同等かそれ以上である必要があります。
IntegerExpressionまたはTimestampExpressionがNULLの場合、結果はNULLです。
関数は、IntegerExpressionで求められる時間間隔の合計と時間隔を計算し、指定されたTimestampExpressionに加算します。1年加算するとタイムスタンプは12か月進み、1週間加算するとタイムスタンプは7日進みます。IntegerExpressionが負の場合は、指定された時間隔がTimestampExpressionから減算されます。
指定された時間隔およびタイムスタンプ式を使用することによって、精度が失われる可能性があります。たとえば、時間隔がSQL_TSI_HOURで、IntegerExpressionに2およびTimestampExpressionにTT_DATEを指定すると、TimesTenは2時間を0日として扱い、元の日付に0日を加算した合計を戻すため、精度が失われることがあります。ただし、IntegerExpressionが48の場合、TimesTenは48時間を2日として扱い、元の日付に2日加算した合計を戻します。この場合、精度は失われません。
タイムスタンプの追加によって指定された構成要素がオーバーフローになる場合(60秒以上、24時間以上、12か月以上など)、オーバーフローは次の構成要素に引き継がれます。たとえば、秒の構成要素がオーバーフローになると、分の構成要素が進められます。
例
TIMESTAMPADD関数を使用して、タイムスタンプ'2009-11-30 10:00:00'に3か月加算します。TimesTenは、年を増分し、2月の28日に対応するように日付部分を調整します。
Command> SELECT TIMESTAMPADD (SQL_TSI_MONTH, 3, TIMESTAMP '2010-11-30 10:00:00')
         FROM dual;
< 2011-02-28 10:00:00 >
1 row found.
TIMESTAMPADD関数を使用して、タイムスタンプ'2010-12-31 23:59:59'に1秒加算します。TimesTenは、すべてのタイムスタンプの構成要素にオーバーフローを伝播し、適切に構成要素を進めます。
Command> SELECT TIMESTAMPADD (SQL_TSI_SECOND, 1, TIMESTAMP '2010-12-31 23:59:59')
         FROM dual;
< 2011-01-01 00:00:00 >
1 row found.
TIMESTAMPDIFF関数は、2つのタイムスタンプ間の指定された時間隔の合計を戻します。
パラメータ
TIMESTAMPDIFFには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Interval | 
指定された時間隔。リテラルとして表す必要があります。説明セクションに有効な値を示します。 | 
TimestampExpression1 | 
日時式。有効なデータ型は、ORA_DATE、ORA_TIMESTAMP、TT_DATEおよびTT_TIMESTAMPです。(別名のDATEおよびTIMESTAMPデータ型も有効です。)TT_TIMEはサポートされていません。 | 
TimestampExpression2 | 
日時式。有効なデータ型は、ORA_DATE、ORA_TIMESTAMP、TT_DATEおよびTT_TIMESTAMPです。(別名のDATEおよびTIMESTAMPデータ型も有効です。)TT_TIMEはサポートされていません。 | 
説明
Intervalに有効な値は、次のとおりです。
SQL_TSI_FRAC_SECOND
SQL_TSI_SECOND
SQL_TSI_MINUTE
SQL_TSI_HOUR
SQL_TSI_DAY
SQL_TSI_WEEK
SQL_TSI_MONTH
SQL_TSI_QUARTER
SQL_TSI_YEAR
SQL_TSI_FRAC_SECONDは、10億分の1秒単位で表されます。
Intervalは、タイムスタンプの差を戻す単位を決定します。たとえば、SQL_TSI_YEARを指定すると、タイムスタンプの差は年数で戻されます。
TimesTenは、TimestampExpression2からTimestampExpression1を引いた差を結果として戻します。戻り型は、TT_BIGINTです。
正数のタイムスタンプ式(0001-01-01)のみ使用できます。TT_DATEおよびTT_TIMESTAMPでは、データ型の開始範囲が1753-01-01であるため、タイムスタンプ式はこの日付と同等かそれ以上である必要があります。
TimestampExpression1またはTimestampExpression2がNULLの場合、結果はNULLです。
いずれかのタイムスタンプ式が日付値で、Intervalで小数秒、秒、分または時間が指定されると、TimesTenでタイムスタンプの差が計算される前に、タイムスタンプの時間部分が0(ゼロ)に設定されます。
関数は、まず、より上位の時間隔型を指定された時間隔型に変換することによって、指定されたIntervalの単位で各タイムスタンプを表します。たとえば、指定された時間隔が月数の場合、年数が月数に変換されます。つまり、1年は12か月、1週間は7日などです。2つのタイムスタンプ間の日数を検出するために、正確な日数が計算されます。月数は日数によって変わるため、TimesTenでは1か月の日数は想定されていません。
関数は、時間隔の小数部分が時間隔の境界をまたぐときに、指定された時間隔を増分します。たとえば、2009-12-31と2010-01-01の間の年の差は、年の小数部が翌年にまたがるため(2009年から2010年)、1年となります。ただし、2010-01-01と2010-12-31の差は、時間隔の小数部分が境界をまたがないため0年です。2010年内になります。
関数は、週の差を計算する場合は、最初に日数で差を計算してから、その結果を丸める前に7で除算します。TimesTenでは、1週間は日曜日から始まると想定されています。そのため、2010-10-21(木曜日)と2010-10-25(次の月曜日)の週の差は1週間になります。週の開始を火曜日とすると、同じ日付間の差は0週間になります。
例
TIMESTAMPDIFF関数を使用して、2008-02-01と2008-03-01の日付間の差を日数で計算します。2008年はうるう年のため、結果は29日になります。1か月を30日と想定しなくても、正確に計算されます。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_DAY, DATE '2008-02-01',
                               DATE '2008-03-01') 
         FROM dual;
< 29 >
1 row found.
TIMESTAMPDIFF関数を使用して、2009-02-01と2009-03-01の日付間の差を月数で計算します。月の時間隔の境界をまたぐため、関数は1を戻します。2つ目の例では、時間隔に日数が指定されているため、結果は28になります。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_MONTH, DATE '2009-02-01',
                               DATE '2009-03-01')
         FROM dual;
< 1 >
1 row found.
Command> SELECT TIMESTAMPDIFF (SQL_TSI_DAY, DATE '2009-02-01',
                               DATE '2009-03-01')
         FROM dual;
< 28 >
1 row found.
TIMESTAMPDIFF関数を使用して、2009-02-01と2009-02-29の日付間の差を月数で計算します。月の時間隔の境界をまたがないため、関数は0(ゼロ)を戻します。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_MONTH, DATE '2009-02-01',
           DATE '2009-02-28') FROM dual;
< 0 >
1 row found.
TIMESTAMPDIFF関数を使用して、型が混在した期間の時間差を小数秒で示します。1時間の時間差は、ナノ秒(小数秒の単位)で戻されます。データ型の時間部分は00:00:00に設定されます。
Command> SELECT TIMESTAMPDIFF (SQL_TSI_FRAC_SECOND,
                               TT_TIMESTAMP '2009-12-31 01:00:00.00', 
                               DATE '2009-12-31') 
         FROM dual;
< -3600000000000 >
1 row found.
TO_BLOB関数は、VARBINARYまたはBINARYをBLOBに変換します。
この関数は、TimesTen Scaleoutではサポートされていません。
例
次の例では、BINARY列およびVARBINARY列を持つ表を作成します。TO_BLOB関数は、BINARYおよびVARBINARYデータをBLOBに変換するためにこれらの列の値で使用されます。
Command> CREATE TABLE bvar(col1 BINARY (10), col2 VARBINARY (10)); Command> INSERT INTO bvar (col1, col2) VALUES (0x4D7953514C, 0x39274D); 1 row inserted. Command> SELECT * FROM bvar; < 4D7953514C0000000000, 39274D > 1 row found. Command> SELECT TO_BLOB(col1), TO_BLOB(col2) FROM bvar; < 4D7953514C0000000000, 39274D > 1 row found.
TO_CHAR関数は、DATE、TIMESTAMPまたは数値の入力値をVARCHAR2に変換します。
パラメータ
TO_CHARには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
DATE、TIMESTAMP、CLOB、NCLOBまたは数式。 | 
Expression2 | 
書式文字列。省略された場合、TimesTenではデフォルトの日付書式(YYYY-MM-DD)が使用されます。 | 
Expression3 | 
現在は無視されているNLSパラメータを指定するための、CHARまたはVARCHAR2式。 | 
説明
TO_CHARでは、式に指定されたデータ型に応じて異なる日時書式モデルがサポートされています。DATEまたはTIMESTAMPデータ型のTO_CHARに使用される日時書式モデルの詳細は、「日時書式モデル」を参照してください。TT_DATEまたはTT_TIMESTAMPデータ型のTO_CHARに使用される日時書式モデルの詳細は、「ROUNDおよびTRUNC日付関数の書式モデル」を参照してください。
TO_CHARでは、式に指定された数値データ型に応じて異なる数値書式モデルがサポートされています。NUMBERまたはORA_FLOATデータ型のTO_CHARに使用される数値書式モデルの詳細は、「数値書式モデル」を参照してください。その他のすべての数値データ型のTO_CHARに使用される数値書式モデルの詳細は、「ROUNDおよびTRUNC日付関数の書式モデル」を参照してください。
例
SELECT FIRST 5 first_name, 
               TO_CHAR (hire_date, 'MONTH DD, YYYY'),
               TO_CHAR (salary, '$999999.99')
  FROM employees;
< Steven, JUNE      17, 1987,   $24000.00 >
< Neena, SEPTEMBER 21, 1989,   $17000.00 >
< Lex, JANUARY   13, 1993,   $17000.00 >
< Alexander, JANUARY   03, 1990,    $9000.00 >
< Bruce, MAY       21, 1991,    $6000.00 >
5 rows found.
SELECT TO_CHAR(-0.12,'$B99.9999') FROM dual;
<   -$.1200 >
1 row found.
SELECT TO_CHAR(-12, 'B99999PR') FROM dual;
<     12  >
1 row found.
SELECT TO_CHAR(-12,'FM99999') FROM dual;
< -12 >
1 row found.
SELECT TO_CHAR(1234.1,'9,999.999') FROM dual;
<  1,234.100 >
1 row found.
TO_CLOB関数は、次の値のいずれかをCLOBに変換します。
CHAR、VARCHAR2、NVARCHAR2、TT_VARCHAR、TT_NVARCHARまたはNCLOBデータ型のいずれかに含まれる文字値
DATEまたはTIMESTAMPデータ型に含まれる日時値
NUMBER、BINARY_FLOATまたはBINARY_DOUBLEデータ型に含まれる数値
この関数は、TimesTen Scaleoutではサポートされていません。
例
次の例では、TO_CLOB関数を使用して文字列を変換します。
Command> DESCRIBE clob_content;
 
Table USER1.CLOB_CONTENT:
  Columns:
   *ID                              NUMBER (38) NOT NULL
    CLOB_COLUMN                     CLOB NOT NULL
 
1 table found.
(primary key columns are indicated with *)
Command> INSERT INTO clob_content (id, clob_column) VALUES (3, EMPTY_CLOB());
1 row inserted.
Command> UPDATE clob_content 
         SET clob_column = TO_CLOB('Demonstration of the TO_CLOB function.') 
         WHERE id = 3;
1 row updated.
TO_DATE関数は、CHAR、VARCHAR2、CLOBまたはNCLOB引数をDATEデータ型の値に変換します。
パラメータ
TO_DATEには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
CHAR、VARCHAR2、CLOBまたはNCLOB式。 | 
Expression2 | 
書式文字列。この式は、通常は必須です。オプションになるのは、Expression1がデフォルトの日付書式YYYY-MM-DD HHMISSである場合のみです。 | 
Expression3 | 
現在は無視されているNLSパラメータを指定するための、CHARまたはVARCHAR2式。 | 
例
Command> SELECT TO_DATE ('1999, JAN 14', 'YYYY, MON DD') FROM dual;
< 1999-01-14 00:00:00 >
1 row found.
Command> SELECT TO_CHAR(TO_DATE('1999-12:23','YYYY-MM:DD')) FROM dual;
< 1999-12-23 00:00:00 >
1 row found.
Command> SELECT TO_CHAR(TO_DATE('12-23-1997 10 AM:56:20', 
                                'MM-DD-YYYY HH AM:MI:SS'), 
                                'MONTH DD, YYYY HH:MI-SS AM')
         FROM dual;
< DECEMBER  23, 1997 10:56-20 AM >
1 row found.
Command> SELECT TO_CHAR(TO_DATE('12-23-1997 15:56:20', 
                                'MM-DD-YYYY HH24:MI:SS'), 
                                'MONTH DD, YYYY HH24:MI-SS')
         FROM dual;
< DECEMBER  23, 1997 15:56-20 >
1 row found.
TO_TIMESTAMP関数は、CHAR、VARCHAR2、CLOBまたはNCLOB引数をTIMESTAMPデータ型の値に変換します。
パラメータ
TO_TIMESTAMPには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
Expression1 | 
CHAR、VARCHAR2、CLOBまたはNCLOB式。 | 
Expression2 | 
Expression1の書式を指定する書式文字列。書式文字列(Expression2)を省略する場合は、TIMESTAMPデータ型のデフォルトの書式のExpression1を指定する必要があります。TIMESTAMPデータ型のデフォルトの書式はSYYYY-MM-DD HH24:MI:SS:FF[9]です。 | 
Expression3 | 
NLSパラメータを指定するCHARまたはVARCHAR2式。この値は現在無視されています。 | 
説明
TO_TIMESTAMP関数は、CHAR、VARCHAR2、CLOBまたはNCLOB式(Expression1として関数に渡された)をTIMESTAMPデータ型の値に変換します。戻りデータ型は、TIMESTAMPです。
有効な日時書式要素を、Expression2の書式文字列に使用できます。詳細は、日時書式モデルを参照してください。
例
例1: この例は、TO_TIMESTAMP関数の戻りデータ型を示しています。この最大小数秒精度は9です。
Command> describe SELECT TO_TIMESTAMP ('2020-05-07 10:11:12.123456') FROM dual;
 
Prepared Statement:
  Columns:
    EXP                             TIMESTAMP (9) NOT NULL
例2: この例では、文字列をTIMESTAMPデータ型に変換する場合にエラーがスローされます。Expression1はTIMESTAMPデータ型の小数秒精度6を示しますが、書式文字列(Expression2)は2の値(FF2)を示します。値を切り捨てることができず、変換エラーが発生します。
Command> SELECT TO_TIMESTAMP('2020-01-01 10:11:12.123456',
           'YYYY-MM-DD HH:MI:SS.FF2') FROM dual;
 2813: Error converting from character string '2020-01-01 10:11:12.123456' 
       to timestamp
The command failed.
例3: これらの例は、FF[n]のnの値がExpression1の小数秒(この例では123456)を格納するのに十分な大きさで、切り捨てられないようにする必要があることを示しています。2番目の例のようにnの値を指定しない場合、デフォルトは9になります。
Command> SELECT TO_TIMESTAMP ('2020-05-07 10:10:10.123456',
         'YYYY-MM-DD HH:MI:SS.FF6') FROM dual;
< 2020-05-07 10:10:10.123456 >
1 row found.
Command> select to_timestamp('2020-05-07 10:10:10.123456',
         'YYYY-MM-DD HH:MI:SS.FF') FROM dual;
< 2020-05-07 10:10:10.123456000 >
1 row found.
例4: 次の例は、Expression1が文字列で、書式文字列が指定されている場合の結果を示しています。
Command> SELECT TO_TIMESTAMP ('2020-05-07 10:10:10.123456',
         'YYYY-MM-DD HH:MI:SS.FF6') FROM dual;
< 2020-05-07 10:10:10.123456 >
1 row found.
Command> SELECT TO_TIMESTAMP ('2020-05-07 23:00:00.123456',
         'YYYY-MM-DD HH24:MI:SS.FF6') FROM dual;
< 2020-05-07 23:00:00.123456 >
1 row found.
例5: この例では、FF書式文字列を使用しています。FFの書式では、結果に表示されているように最大精度の9が使用されます。
Command> SELECT TO_TIMESTAMP ('10-Sep-02 10:10:10.123000',
         'DD-Mon-RR HH12:MI:SS.FF') FROM dual;
< 2002-09-10 10:10:10.123000000 >
1 row found.
例6: 次の例は、書式文字列がない場合の結果を示しています。デフォルト書式はExpression1に使用されます。Expression1の小数秒精度(この例では123456789)はオプションです。
Command> SELECT TO_TIMESTAMP ('2020-MAY-07 101010.123456789') FROM dual;
< 2020-05-07 10:10:10.123456789 >
1 row found.
Command> SELECT TO_TIMESTAMP ('2020-MAY-07 101010') FROM dual;
< 2020-05-07 10:10:10.000000000 >
1 row found.
Command> SELECT TO_TIMESTAMP ('2020-MAY-07 101010.12') FROM dual;
< 2020-05-07 10:10:10.120000000 >
1 row found.
例7: この例は、TO_TIMESTAMPでTO_CHAR関数を使用して、TIMESTAMPデータ型を明示的なタイムスタンプ書式で返す方法を示しています。
Command> SELECT TO_CHAR(TO_TIMESTAMP ('2020-05-07 13:11:12.123456',
         'YYYY-MM-DD HH24:MI:SS.FF6'),'DD/MON/YYYY HH24:MI:SS.FF6 PM') FROM dual;
< 07/MAY/2020 13:11:12.123456 PM >
1 row found.
例8: この例では、TIMESTAMP(9)型の列を持つ表を作成します。表を記述した後、例では、TO_TIMESTAMP関数を使用せずに1行挿入してから、TO_TIMESTAMP関数を使用して2行目を挿入します。表に対するSELECTが、2つの挿入操作の結果を示しています。
Command> CREATE TABLE ts_table(col1 TIMESTAMP(9));
Command> describe ts_table;
 
Table SAMPLEUSER.TS_TABLE:
  Columns:
    COL1                            TIMESTAMP (9)
 
1 table found.
(primary key columns are indicated with *)
Command> INSERT INTO ts_table VALUES('2020-05-04 11:12:13.999999');
1 row inserted.
Command> INSERT INTO ts_table VALUES(to_timestamp('04-05-2020 11:12:13.123456789',
         'DD-MM-YYYY HH:MI:SS.FF9'));
1 row inserted.
Command> SELECT * FROM ts_table;
< 2020-05-04 11:12:13.999999000 >
< 2020-05-04 11:12:13.123456789 >
2 rows found.
例9: 次の例では、AMおよびPM書式文字列の使用を説明しています。
Command> SELECT TO_TIMESTAMP ('10-Sep-02 10:10:10.123456 PM',
         'DD-Mon-RR HH12:MI:SS.FF6 PM') FROM dual;
< 2002-09-10 22:10:10.123456 >
1 row found.
Command> SELECT TO_CHAR(TO_TIMESTAMP ('10-Sep-02 10:10:10.123456 PM', 
         'DD-Mon-RR HH12:MI:SS.FF6 PM'),'DD-Mon-RR HH12:MI:SS.FF6 PM') 
         FROM dual;
< 10-Sep-02 10:10:10.123456 PM >
1 row found.
次の例では、TIMESTAMP(9)データ型を持つcol2を定義して、ts_table2表を作成します。表を記述した後、挿入操作を実行し、AMおよびPMを使用してTIMESTAMP列にデータを挿入する方法を説明しています。
Command> CREATE TABLE ts_table2 (col1 number primary key, col2 timestamp(9));
Command> describe ts_table2;
Table SAMPLEUSER.TS_TABLE2:
  Columns:
   *COL1                            NUMBER NOT NULL
    COL2                            TIMESTAMP (9)
1 table found.
(primary key columns are indicated with *)
Command> INSERT INTO ts_table2 VALUES (100,
         TO_TIMESTAMP('10-FEB-20 12.46.48.802050 PM',
         'DD-MON-RR HH:MI:SS.FF AM'));
1 row inserted.
Command> SELECT TO_CHAR(col2) FROM ts_table2;
< 2020-02-10 12:46:48.802050000 >
1 row found.
Command> SELECT TO_CHAR (col2, 'DD-MON-RR HH:MI:SS.FF AM') from ts_table2;
< 10-FEB-20 12:46:48.802050000 PM >
1 row found.
TO_LOB関数は、CLOBおよびVARBINARYデータ型に指定されたTT_VARCHARおよびVARCHAR2データ型をBLOBに変換します。
この関数は、TimesTen Scaleoutではサポートされていません。
説明
この関数は、TT_VARCHAR、VARCHAR2またはVARBINARY列でのみ、およびLOB列が定義されている表でCREATE TABLE AS SELECTまたはINSERT...SELECT文を使用する場合にのみ使用できます。
例
次の例では、LOB列を持つ表のINSERT...SELECT文内でTO_LOB関数を使用する方法を示します。
Command> CREATE TABLE clb(c CLOB);
Command> CREATE TABLE vc (v VARCHAR2(2000));
Command> INSERT INTO vc(v) 
         VALUES ('Showing the functionality of the TO_LOB function');
1 row inserted.
Command> INSERT INTO clb 
         SELECT TO_LOB(v) FROM vc; 
1 row inserted.
Command> SELECT * FROM clb;
< Showing the functionality of the TO_LOB function >
1 row found.
前述の制限のため、TO_CLOBまたはTO_BLOB関数を使用できるすべての場合にTO_LOB関数を使用できるわけではありません。次の例では、この方法でTO_LOB関数の使用を試みた場合に受け取るエラーを示します。
Command> SELECT TO_LOB(col1) FROM bvar; 2610: Operand data type 'BINARY' invalid for operator 'TO_LOB' in expr ( TO_LOB( BVAR.COL1 )) The command failed.
TO_NCLOB関数は、次の値のいずれかをNCLOBに変換します。
CHAR、VARCHAR2、NVARCHAR2、TT_VARCHAR、TT_NVARCHARまたはNCLOBデータ型のいずれかに含まれる文字値
DATEまたはTIMESTAMPデータ型に含まれる日時値
NUMBER、BINARY_FLOATまたはBINARY_DOUBLEデータ型に含まれる数値
この関数は、TimesTen Scaleoutではサポートされていません。
例
次の例では、VARCHAR2 job_title列のデータをNCLOBデータ型に変換します。
Command> SELECT TO_NCLOB(job_title) FROM jobs; < Public Accountant > < Accounting Manager > < Administration Assistant > < President > < Administration Vice President > < Accountant > < Finance Manager > < Human Resources Representative > < Programmer > < Marketing Manager > < Marketing Representative > < Public Relations Representative > < Purchasing Clerk > < Purchasing Manager > < Sales Manager > < Sales Representative > < Shipping Clerk > < Stock Clerk > < Stock Manager > 19 rows found.
式をNUMBER型の値に変換します。
TRIM関数は、文字列から先行文字または後続文字(あるいはその両方)を削除します。
SQL構文
TRIMには、次の4つの構文オプションがあります。
Trim_characterと組み合せてTRIM修飾子の1つ(LEADING、TRAILINGまたはBOTH)を指定します。
TRIM ( LEADING|TRAILING|BOTHTrim_characterFROMExpression)
Trim_characterなしでTRIM修飾子の1つ(LEADING、TRAILINGまたはBOTH)を指定します。この場合、Trim_characterはデフォルトで空白になります。
TRIM ( LEADING|TRAILING|BOTH FROM Expression )
TRIM修飾子なしでTrim_characterを指定すると、Trim_characterの先行文字と後続文字の両方がExpressionから削除されます。
TRIM (Trim_characterFROMExpression)
修飾子またはTrim_characterなしでExpressionを指定すると、Expressionから先行および後続の空白文字が削除されます。
TRIM ( Expression )
パラメータ
TRIMには、次のパラメータがあります。
| パラメータ | 説明 | 
|---|---|
LEADING | TRAILING | BOTH | 
LEADING、TRAILINGまたはBOTHは、TRIM関数の修飾子です。LEADINGは、ExpressionからTrim_characterのすべての先行文字を削除します。TRAILINGは、ExpressionからTrim_characterのすべての後続文字を削除します。BOTHは、ExpressionからTrim_characterの先行文字と後続文字を削除します。 | 
[Trim_character] | 
指定する場合、Trim_characterはExpressionから切り捨てるCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列を表します。1つの文字のみを指定できます。Trim_characterを指定しない場合、デフォルトで単一の空白文字に設定されます。Trim_characterが文字リテラルの場合、一重引用符でその文字を囲みます。 | 
Expression | 
Expressionは、切り捨てる対象とするCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列です。Expressionが文字リテラルの場合、一重引用符でその文字を囲みます。 | 
説明
ExpressionがCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。ExpressionがNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。ExpressionがCLOB型の場合、戻されるデータ型はCLOBです。ExpressionがNCLOB型の場合、戻されるデータ型はNCLOBです。戻されるデータ型の長さは、Expressionのデータ型の長さに等しくなります。
ExpressionがCHAR長セマンティクスで定義されたデータ型の場合、戻される長さはCHAR長セマンティクスで表現されます。
Trim_characterまたはExpressionのいずれかがNULLの場合、結果はNULLです。
Trim_characterとExpressionには、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。ExpressionがTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。ExpressionがTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。
Trim_characterがNCHARまたはNVARCHAR2型で、ExpressionがCHARまたはVARCHAR2型の場合、Trim_characterはTRIMの実行前にCHARまたはVARCHAR2に変換されます。Trim_characterの変換は失われる可能性があります。Trim_characterがデータベースの文字セットに含まれない場合、問合せにより予期しない結果が発生する可能性があります。
CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBおよびNCLOB型の場合:
Expressionのすべての文字がTRIM関数により削除された場合、結果はNULLになります。
TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:
Expressionのすべての文字がTRIM関数により削除された場合、結果は空の文字列になります。
例
TRIM関数を修飾子とともに使用し、Expressionの'0000TRIM Example0000'からTrim_characterの'0'(ゼロ)を削除します。
Command> SELECT TRIM (LEADING '0' FROM '0000TRIM Example0000') FROM dual; < TRIM Example0000 > 1 row found. Command> SELECT TRIM (TRAILING '0' FROM '0000TRIM Example0000') FROM dual; < 0000TRIM Example > 1 row found. Command> SELECT TRIM (BOTH '0' FROM '0000TRIM Example0000') FROM dual; < TRIM Example > 1 row found.
TRIM関数を修飾子とともに使用し、空白文字を削除します。Trim_characterは指定しません。Trim_characterのデフォルト値は、空白文字です。
Command> SELECT TRIM (LEADING FROM ' TRIM Example ') FROM dual; < TRIM Example > 1 row found. Command> SELECT TRIM (TRAILING FROM ' TRIM Example ') FROM dual; < TRIM Example > 1 row found. Command> SELECT TRIM (BOTH FROM ' TRIM Example ') FROM dual; < TRIM Example > 1 row found.
TRIM関数をTrim_characterの'0'(ゼロ)とともに使用します。修飾子は指定しません。Expressionの'0000TRIM Example0000'から、先行および後続の'0'(ゼロ)が削除されます。
Command> SELECT TRIM ('0' FROM '0000TRIM Example0000') FROM dual;
< TRIM Example >
1 row found.
TRIM関数を修飾子またはTrim_characterなしで使用します。先行および後続の空白文字が削除されます。
< TRIM Example >
1 row found.
Command> SELECT TRIM ('    TRIM Example    ') FROM dual;
書式モデルfmtで指定された単位に時刻部分が切り捨てられた日付を戻します。戻される値の型はDATEです。fmtを指定しない場合、dateは最も近い日に切り捨てられます。
一定の小数位の桁数に切り捨てられた数値を戻します。
TT_HASH関数は、式(または式のリスト)のハッシュ値を戻します。この値は、ハッシュ索引で使用される値です。
説明
各式は、既知のデータ型を使用し、NULL値不可である必要があります。式のハッシュ値は、式の値と型の両方に依存します。たとえば、TT_INTEGERで値が25のTT_HASHは、NUMBERまたはBINARY_DOUBLEで値が25のTT_HASHとは異なる場合があります。式のリストを指定する場合は、TT_HASHの結果はリスト内の式の順序によって異なります。
単純列参照でない定数および式は、アプリケーションで制御できない内部入力ルールの影響を受けるため、単純列参照でない式に適した値をTT_HASHで計算する場合の最適な方法は、CASTを使用して式を適切な型にキャストする方法です。
TT_HASHの結果のデータ型は、32ビット・モードではTT_INTEGER、64ビット・モードではTT_BIGINTです。
TT_HASHは、SQL文内の式を使用できるすべての場所で使用できます。たとえば、TT_HASHでは、SELECTリスト、WHEREまたはHAVING句、ORDER BY句、GROUP BY句で使用できます。
エラー・メッセージ、トレース・メッセージおよびttXactAdminの出力ではハッシュ値が符号付き10進数として表示されるため、値がTT_HASH出力と一致します。
UNISTRは、NVARCHAR2型のデータに解決される文字列を引数として取り、UTF-16書式の値を戻します。Unicodeエスケープがサポートされています。文字列に文字のUnicodeエンコード値を指定できます。
VSIZE関数は、式の内部表現でのバイト数を返します。
説明
式の値がNULLの場合は、NULLが返されます。それ以外の場合、返されるデータ型はNUMBERです。
VSIZE関数は、LOBデータを直接サポートしません。ただし、LOBを暗黙的なデータ変換を介して引数として渡すことはできます。
例
部門10の従業員のlast_name列のバイト数を返すには、VSIZE関数を使用します。
Command> SELECT last_name, VSIZE (last_name) "BYTES" FROM employees
         WHERE department_id = 10 ORDER BY employee_id;
< Whalen, 6 >
1 row found.
この例では、CLOBデータ型で定義された列にVSIZE関数を使用する方法を示しています。この例では、最初に、VARCHAR2(200)データ型で定義されたcol1列を持つvsize_varchar2表を作成します。次に、CLOBデータ型で定義されたcol1列を持つvsize_clob表を作成します。同じ文字列が各表のcol1に挿入されます。次に、VSIZE関数を使用して、col1のデータの内部表現でのバイト数を返します。vsize_clob表に対してCAST関数を使用して、CLOBデータ型をVARCHAR2(200)データ型col1列にキャストします。前述のように、VSIZE関数は、vsize_varchar2表に対する問合せに対してvsize_clob表に対する場合と同じ同じ結果を返します。
Command> CREATE TABLE vsize_varchar2 (col1 VARCHAR2 (200));
Command> CREATE TABLE vsize_clob (col1 CLOB);
Command> INSERT INTO vsize_varchar2 VALUES ('This is a test to illustrate how to 
            use the VSIZE function on a column defined with the CLOB 
            data type');
1 row inserted.
Command> INSERT INTO vsize_clob VALUES ('This is a test to illustrate how to 
            use the VSIZE function on a column defined with the CLOB 
            data type');
1 row inserted.
Command> SELECT VSIZE (col1) FROM vsize_varchar2;
< 102 >
1 row found.
Command> SELECT VSIZE (CAST (col1 AS VARCHAR2 (200))) FROM vsize_clob;
< 102 >
1 row found.
この例は、LENGTH関数とVSIZE関数の違いを示しています。LENGTH関数は、SYSDATEの長さを返します。VSIZE関数は、SYSDATEの内部表現でのバイト数を返します。
Command> SELECT SYSDATE FROM dual; < 2020-03-07 10:47:40 > 1 row found. Command> SELECT LENGTH (SYSDATE) FROM dual; < 19 > 1 row found. Command> SELECT VSIZE (SYSDATE) FROM dual; < 7 > 1 row found.