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) | 指定した日付の年を返します。 |