スカラー関数の呼び出し
スカラー関数では、各行ごとに値を返します。 例えば、絶対値スカラー関数は、数値列を引数として受け取り、列内の各値の絶対値を返します。 スカラー関数を呼び出すためのエスケープ シーケンスは次のとおりです
{fn scalar-function }
スカラー関数は、「付録 E: スカラー関数」に挙げられている関数の 1 つです。 スカラー関数エスケープ シーケンスの詳細については、「付録 C: SQL 文法」の「スカラー関数エスケープ シーケンス」を参照してください。
例えば、次の SQL ステートメントでは、大文字の顧客名の同じ結果セットが作成されます。 最初のステートメントでは、エスケープ シーケンス構文を使用します。 2 番目のステートメントでは、OS/2 用の Ingres のネイティブ構文が使用されており、相互運用はできません。
SELECT {fn UCASE(Name)} FROM Customers
SELECT uppercase(Name) FROM Customers
アプリケーションでは、ネイティブ構文を使用するスカラー関数の呼び出しと、ODBC 構文を使用するスカラー関数の呼び出しを混在させることができます。 例えば、Employee テーブル内の名前が姓、コンマ、名として格納されているとします。 次の SQL ステートメントは、Employee テーブルに従業員の姓の結果セットを作成します。 このステートメントでは、ODBC スカラー関数 SUBSTRING と SQL Server スカラー関数 CHARINDEX が使用され、SQL Server でのみ正しく実行されます。
SELECT {fn SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)} FROM Customers
相互運用性を最大限に高めるために、アプリケーションは CONVERT スカラー関数を使用して、スカラー関数の出力が必要な型であることを確認する必要があります。 CONVERT 関数は、1 つの SQL データ型から指定された SQL データ型にデータを変換します。 CONVERT 関数の構文は次のとおりです
CONVERT( value_exp , data_type)
ここで、value_expは列名、別のスカラー関数の結果、またはリテラル値であり、data_typeは、「付録 D: データ型」で定義されている SQL データ型識別子によって使用される #define 名と一致するキーワードです。 例えば、次の SQL ステートメントでは、CURDATE 関数の出力がタイムスタンプまたは文字データではなく、日付であることを確認するために CONVERT 関数を使用しています。
INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)
VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)
データ ソースでサポートされているスカラー関数を特定するために、アプリケーションは、SQL_CONVERT_FUNCTIONS、SQL_NUMERIC_FUNCTIONS、SQL_STRING_FUNCTIONS、SQL_SYSTEM_FUNCTIONS、SQL_TIMEDATE_FUNCTIONS オプションを使用して SQLGetInfo を呼び出します。 CONVERT 関数でサポートされている変換操作を特定するために、アプリケーションは SQL_CONVERT で始まる任意のオプションを指定して SQLGetInfo を呼び出します。