関数は、データを操作し、結果を戻します。この章には、すべての関数のアルファベット順のリストに加え、次の関数の概要も含まれています。
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
,n
FROM 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 |
指定された時間隔。リテラルとして表す必要があります。説明セクションに有効な値を示します。 |
TimestampExpression 1 |
日時式。有効なデータ型は、ORA_DATE 、ORA_ TIMESTAMP 、TT_DATE およびTT_TIMESTAMP です。(別名のDATE およびTIMESTAMP データ型も有効です。)TT_TIME はサポートされていません。 |
TimestampExpression 2 |
日時式。有効なデータ型は、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_character
FROMExpression
)
Trim_character
なしで
TRIM
修飾子の1つ(LEADING
、TRAILINGまたはBOTH
)を指定します。この場合、Trim_character
はデフォルトで空白になります。
TRIM ( LEADING|TRAILING|BOTH FROM Expression
)
TRIM修飾子なしで
Trim_characterを指定すると、
Trim_character
の先行文字と後続文字の両方がExpression
から削除されます。
TRIM (Trim_character
FROMExpression
)
修飾子または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.