Поделиться через


Функция явного преобразования типа данных

Явное преобразование типов данных указывается с точки зрения определений типов данных 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 с столбцом EMPNO типа SQL_SMALLINT и столбцом EMPNAME типа SQL_CHAR.

Если приложение указывает следующую инструкцию 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  
    
  • Драйвер для входящего трафика преобразует инструкцию SQL в:

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