Иллюстрированный самоучитель по SQL для начинающих

Сложные выражения со значением

Использование выражения CAST внутри SQL-кода

Предположим, что вы работаете для торговой компании, которая собирает данные о своих предполагаемых сотрудниках, а также о сотрудниках, которых вы уже наняли. Данные о предполагаемых сотрудниках вы разместили в таблице PROSPECT (потенциальный сотрудник), а различаете каждого из них по его номеру социального страхования (Social Security Number, SSN), который вы храните в виде данных типа CHAR(9). Данные о работающих сотрудниках вы разместили в другой таблице, EMPLOYEE (сотрудник), и различаются они также по своему номеру социального страхования, но имеющему уже тип INTEGER. Теперь вам требуется получить список людей, данные о которых содержатся в обеих таблицах. Чтобы выполнить эту задачу, используйте выражение CAST:

SELECT * FROM EMPLOYEE
WHERE EMPLOYEE.SSN =
CAST(PROSPECT.SSN AS INTEGER);

Использование выражения CAST при взаимодействии SQL и базового языка

Главное предназначение выражения CAST состоит в том, чтобы работать с такими типами данных, которые есть в SQL, но отсутствуют в базовом языке. Вот некоторые примеры таких типов.

  • Fortran и Pascal не имеют типов данных DECIMAL и NUMERIC.
  • Стандартный COBOL не содержит типов данных FLOAT и REAL.
  • Ни в каком языке, кроме SQL, нет типа данных DATETIME.

Предположим, что для доступа к таблицам, у которых есть столбцы с типом данных DECIMAL (5.3), вам нужен язык Fortran или Pascal. При этом требуется избежать неточности, которая может случиться, если переводить значения из этих столбцов в тип данных REAL, используемый в этих двух языках. Эту задачу можно выполнить, используя CAST для перевода данных в базовые переменные (и из базовых переменных), которые имеют тип символьной строки. Например, числовое значение 198.37 переводится в значение '0000198.37' типа CHAR(IO). Вначале в тип CHAR(IO) с помощью CAST преобразуются те данные типа DECIMAL (5.3), которые относятся к сотруднику с идентификационным номером, находящимся в базовой переменной:emp_id_var:

SELECT CAST(Salary AS CHAR(10)) INTO:salary_var
FROM EMP
WHERE EmpID =:emp_id_var;

Затем приложение проверяет появившуюся в переменной:salary_var символьную строку и присваивает этой переменной новое значение, а затем с помощью следующего кода SQL обновляет базу данных:

UPDATE EMP
SET Salary = CAST(:salary_var AS DECIMAL(5.3))
WHERE EmpID =:emp_id_var;

С символьными строками, такими как '000198.37', работать в языках Fortran и Pascal очень трудно, но для выполнения в этих языках нужных операций можно написать набор специальных процедур. В принципе, в любом базовом языке можно получать и обновлять любые SQL-данные, а также получать и задавать точные значения.

Вообще говоря, выражение CAST лучше всего подходит для преобразования типов данных базового языка в типы данных базы и наоборот, а не для преобразования одних типов данных базы в другие.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.