명시적 데이터 형식 변환 함수

명시적 데이터 형식 변환은 SQL 데이터 형식 정의 측면에서 지정됩니다.

명시적 데이터 형식 변환 함수에 대한 ODBC 구문은 변환을 제한하지 않습니다. 한 데이터 형식을 다른 데이터 형식으로 변환하는 특정 변환의 유효성은 각 드라이버별 구현에 의해 결정됩니다. 드라이버는 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 스칼라 함수를 사용하여 데이터 형식을 강제로 변환해야 합니다.

다음 두 예제에서는 CONVERT 함수를 사용하는 방법을 보여 줍니다. 이러한 예제에서는 SQL_SMALLINT 형식의 EMPNO 열과 SQL_CHAR 형식의 EMPNAME 열이 있는 EMPLOYEES라는 테이블이 있다고 가정합니다.

애플리케이션에서 다음 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