共用方式為


明確資料類型轉換函式

明確數據類型轉換是以 SQL 資料類型定義來指定。

明確數據類型轉換函式的 ODBC 語法不會限制轉換。 每個驅動程式特定實作都會決定某個數據類型的特定轉換到另一個數據類型的有效性。 驅動程式會在將 ODBC 語法轉譯成原生語法時,拒絕數據源不支持雖然 ODBC 語法中合法的轉換。 ODBC 函 式 SQLGetInfo,具有轉換選項(例如SQL_CONVERT_BIGINT、SQL_CONVERT_BINARY、SQL_CONVERT_INTERVAL_YEAR_MONTH等等),可讓您查詢數據源支援的轉換。

CONVERT 函式的格式為:

CONVERT(value_exp,data_type

函式會傳回value_exp轉換成指定data_type指定的值,其中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 純量函式來強制轉換數據類型。

下列兩個範例說明 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