Базы данных. Вводный курс

         

Явные преобразования типов или доменов и оператор CAST


Неявные преобразования типов не всегда удобны, недостаточно гибки и иногда могут вызывать ошибки. Поэтому, как показывает предыдущий подраздел, число допустимых неявных преобразований типов в SQL весьма ограничено. Однако в SQL существует специальный оператор CAST, с помощью которого можно явно преобразовывать типы или домены в более широких пределах допускаемых преобразований. Конструкция имеет следующий синтаксис:

CAST ({scalar-expression | NULL } AS {data_type | domain_name})

Оператор преобразует значение заданного скалярного выражения к указанному типу или к базовому типу указанного домена. Результатом применения оператора CAST к неопределенному значению является неопределенное значение. Для значений, отличных от неопределенных, в стандарте приводятся подробные правила выполнения преобразований, которые интуитивно понятны.

Поясним действие оператора CAST в наиболее важных случаях. Примем следующие обозначения типов данных:

EN – точные числовые типы (Exact Numeric)

AN – приблизительные числовые типы (Approximate Numeric)

C – типы символьных строк (Character)

FC – типы символьных строк постоянной длины (Fixed-length Character)

VC – типы символьных строк переменной длины (Variable-length Character)

B – типы битовых строк (Bit String)

FB – типы битовых строк постоянной длины (Fixed-length Bit String)

VB – типы битовых строк переменной длины (Variable-length Bit String)

D – тип Date

T – типы Time

TS – типы Timestamp

YM – типы Interval Year-Month

DT – типы Interval Day-Time

Пусть TD – это тип данных, к которому производится преобразование, а SD – тип данных операнда. Тогда допустимы следующие комбинации («да» означает безусловную допустимость, «нет» – безусловную недопустимость и «?» – допустимость с оговорками).

SDTDENANVCFCVBFBDTTSYMDTENANCBDTTSYMDT
ДаДаДаДаНетНетНетНетНет??
ДаДаДаДаНетНетНетНетНетНетНет
ДаДа??ДаДаДаДаДаДаДа
НетНетДаДаДаДаНетНетНетНетНет
НетНетДаДаНетНетДаНетДаНетНет
НетНетДаДаНетНетНетДаДаНетНет
НетНетДаДаНетНетДаДаДаНетНет
?НетДаДаНетНетНетНетНетДаНет
?НетДаДаНетНетНетНетНетНетДа

По поводу ячеек таблицы, содержащих знак вопроса, необходимо сделать несколько оговорок:

  1. если TD – интервал и SD – тип точных чисел, то TD должен содержать единственное поле даты-времени;
  2. если TD – тип точных чисел и SD – интервал, то SD должен содержать единственное поле даты-времени;
  3. если SD – тип символьных строк и TD – тип символьных строк постоянной или переменной длины, то набор символов SD и TD должен быть одним и тем же.



Содержание раздела