データ型の明示的な変換用関数

明示的なデータ型変換は、SQL データ型定義の観点から指定されます。

明示的なデータ型変換関数の ODBC 構文では、変換は制限されません。 1 つのデータ型から別のデータ型への特定の変換の有効性は、ドライバー固有の実装ごとに決定されます。 ドライバーは、ODBC 構文をネイティブ構文に変換する場合、ODBC 構文では有効ですが、データ ソースではサポートされていない変換を拒否します。 変換オプション (SQL_CONVERT_BIGINT、SQL_CONVERT_BINARY、SQL_CONVERT_INTERVAL_YEAR_MONTHなど) を使用する ODBC 関数 SQLGetInfo は、データ ソースでサポートされている変換について問い合わせる方法を提供します。

CONVERT 関数の形式は次のとおりです。

CONVERT(value_exp, data_type)

関数は、指定したdata_typeに変換 value_exp で指定された値を返 しますここで、data_type は次のいずれかのキーワードです。

SQL_BIGINT
SQL_BINARY
SQL_BIT
SQL_CHAR
SQL_DATE
SQL_DECIMAL
SQL_DOUBLE
SQL_FLOAT
SQL_GUID
SQL_INTEGER
SQL_INTERVAL_DAY
SQL_INTERVAL_DAY_TO_HOUR

SQL_INTERVAL_DAY_TO_MINUTE
SQL_INTERVAL_DAY_TO_SECOND
SQL_INTERVAL_HOUR
SQL_INTERVAL_HOUR_TO_MINUTE
SQL_INTERVAL_HOUR_TO_SECOND
SQL_INTERVAL_MINUTE
SQL_INTERVAL_MINUTE_TO_SECOND
SQL_INTERVAL_MONTH
SQL_INTERVAL_SECOND
SQL_INTERVAL_YEAR
SQL_INTERVAL_YEAR_TO_MONTH
SQL_LONGVARBINARY

SQL_LONGVARCHAR
SQL_NUMERIC
SQL_REAL
SQL_SMALLINT
SQL_TIME
SQL_TIMESTAMP
SQL_TINYINT
SQL_VARBINARY
SQL_VARCHAR
SQL_WCHAR
SQL_WLONGVARCHAR
SQL_WVARCHAR

明示的なデータ型変換関数の ODBC 構文では、変換形式の指定はサポートされていません。 基になるデータ ソースで明示的な形式の指定がサポートされている場合、ドライバーは既定値を指定するか、形式指定を実装する必要があります。

引数value_expには、列名、別のスカラー関数の結果、または数値リテラルまたは文字列リテラルを指定できます。 次に例を示します。

{ fn CONVERT( { fn CURDATE() }, SQL_CHAR ) }  

は CURDATE スカラー関数の出力を文字列に変換します。

ODBC ではスカラー関数からの戻り値にデータ型が必要ないため (多くの場合、関数はデータ ソース固有であるため)、アプリケーションでは可能な限り CONVERT スカラー関数を使用してデータ型変換を強制する必要があります。

次の 2 つの例は、 CONVERT 関数の使用方法を示しています。 これらの例では、EMPLOYEES という名前のテーブルが存在し、型が SQL_SMALLINT の EMPNO 列と、SQL_CHAR型の EMPNAME 列が存在することを前提としています。

アプリケーションで次の SQL ステートメントが指定されている場合:

SELECT EMPNO FROM EMPLOYEES WHERE {fn CONVERT(EMPNO,SQL_CHAR)} LIKE '1%'  
  • ORACLE 用ドライバーは、SQL ステートメントを次のように変換します。

    SELECT EMPNO FROM EMPLOYEES WHERE to_char(EMPNO) LIKE '1%'  
    
  • SQL Server用のドライバーは、SQL ステートメントを次のように変換します。

    SELECT EMPNO FROM EMPLOYEES WHERE convert(char,EMPNO) LIKE '1%'  
    

アプリケーションで次の SQL ステートメントが指定されている場合:

SELECT {fn ABS(EMPNO)}, {fn CONVERT(EMPNAME,SQL_SMALLINT)}  
   FROM EMPLOYEES WHERE EMPNO <> 0  
  • ORACLE 用ドライバーは、SQL ステートメントを次のように変換します。

    SELECT abs(EMPNO), to_number(EMPNAME) FROM EMPLOYEES WHERE EMPNO <> 0  
    
  • SQL Server用のドライバーは、SQL ステートメントを次のように変換します。

    SELECT abs(EMPNO), convert(smallint, EMPNAME) FROM EMPLOYEES  
       WHERE EMPNO <> 0  
    
  • Ingres のドライバーは、SQL ステートメントを次のように変換します。

    SELECT abs(EMPNO), int2(EMPNAME) FROM EMPLOYEES WHERE EMPNO <> 0