Vantageは多数のODBCスカラー関数をサポートしており、今後の新しいデータベース リリースで、他のスカラー関数のサポートも徐々に追加される予定です。データベースで現在サポートされているスカラー関数の一覧については、<Teradata Vantage™ - SQL関数、式、および述部, B035-1145>を参照してください。
クライアントが関数のエスケープ シーケンス(‘SELECT {fn MOD(x, y) }’などの‘{fn scalar-function}’構文)を使用してスカラー関数を問合わせる場合、ODBC Driver for Teradataは、接続されているデータベースがスカラー関数をサポートしているかどうかを確認します。サポートされている場合、ODBC Driver for Teradataはクエリー(“SELECT MOD(x, y)”など)を、データベースに直接送信し、サポートされていない場合は、ユーザーのクエリーをその接続されているデータベースでサポートされているクエリー(“SELECT((x) MOD (y))”など)に変換します。
クライアントは、“SELECT MOD(x, y)”などの関数エスケープ シーケンスを使用せずにスカラー関数を送信することがあります。その場合、ODBC Driver for Teradataはどのようなチェックや変換も行なわずにクライアントのクエリーをそのままデータベースに送信します。そのクエリーは、接続先のデータベースでそのスカラー関数がサポートされていれば成功し、サポートされていなければ失敗します(例えば、MOD関数は、高度なSQL Engine 16.20 Feature Update 1ではサポートされていますが、Teradata Database 15.10ではサポートされていません)。
下表に、上記の動作に関する例をいくつか示します。
| ステートメントの記述 | ODBCドライバで生成されるSQL(SQLNativeSql) | 高度なSQL Engine 16.20 Feature Update 1 | Teradata Database 15.10 |
|---|---|---|---|
SELECT {fn BIT_LENGTH('Teradata')}
|
SELECT(Octet_Length('Teradata')*8)
|
成功 | 成功 |
SELECT BIT_LENGTH('Teradata')
|
SELECT BIT_LENGTH('Teradata')
|
成功 | 失敗 |
SELECT {fn DAYOFYEAR('2018-02-24') }
|
SELECT (((('2018-02-24')(DATE))-(((('2018-02-24')(DATE))/10000*10000+0101(DATE)))) + 1(TITLE 'DayOfYear()'))
|
成功 | 成功 |
SELECT DAYOFYEAR('2018-02-24')
|
SELECT DAYOFYEAR('2018-02-24')
|
失敗 | 失敗 |
高度なSQL Engineでは、次の関数が更新され、ODBCドライバで使用可能な構文がサポートされるようになりました。
| 関数呼び出し | 変更 | 実装されている高度なSQL Engineのバージョン |
|---|---|---|
| CURRENT_DATE() | 括弧の有無にかかわらず呼び出すことができます。 | 16.20 Feature Update 1 |
| LENGTH(s) | 数値式もサポートできます。 | 16.20 Feature Update 1 |
| LTRIM(s) | 数値式でも使用できます。 | 16.20 Feature Update 1 |
| RTRIM(s) | 数値式でも使用できます。 | 16.20 Feature Update 1 |
| SUBSTRING(s,n1[,n2]) | Teradataモードの新しい構文です。 | 16.20 Feature Update 1 |
高度なSQL Engine 16.20 Feature Update 1以降では、以下の関数がサポートされています。
| 関数呼び出し | 目的 |
|---|---|
| BIT_LENGTH(s) | 指定した文字列の長さをビット単位で返します。 |
| CONCAT(s1,s2[,...sn]) | 2つ以上のパラメータ値を連結して1つの文字列にします。 |
| CURDATE() | 現在の日付を返します。 |
| CURTIME() | 現在のローカル時刻を返します。 |
| DAYOFMONTH(e) | 月の初めから指定日までの日数を返します。 |
| DAYOFWEEK(e) | 指定した日付の曜日を返します。 |
| HOUR(e) | 指定した時刻式の時間フィールドを返します。 |
| LOCATE(s1,s2[,p]) | サブストリングs1が始まる位置s2を返します。 |
| MINUTE(e) | 指定した時刻式の分フィールドを返します。 |
| MOD(x1, x2) | 除算の余りを返します。 |
| MONTH(e) | 年の初めから指定日までの月数を返します。 |
| NOW() | 現在の日時を返します。 |
| SECOND(e) | 指定した時刻式の秒フィールドを返します。 |
| UCASE(s) | 指定した文字列の小文字をすべて大文字にして返します。 |
| WEEK(e) | 年の初めから指定日までの週数を返します。 |
| YEAR(e) | 指定した日付の年を返します。 |