|
Программирование >> Исключение дубликатов строк
Типы выражений Обычно при работе с операторами SQL используются следующие три типа вы- ражении: Сцепление (конкатенация) Математические Арифметические для даты/времени Объединение двух или более элементов в одну символьную строку. Сложение, вычитание, умножение и деление. Применение сложения или вычитания к датам и времени Сцепление Стандарт SQL определяет две вертикальные полосы как обозначение оператора конкатенации, или сцепления. Можно объединить два элемента, поместив между ними оператор сцепления. Результатом будет одна строка символов, т. е. соединение обоих элементов. На рис. 5.5 представлена синтаксическая диаграмма для выражения-объединения. Далее приведено общее представление операции сцепления: Выражение Результат ПервыйЭлемент ВторойЭлемент Первый ЭлементВторой Элемент Начнем с самого простого примера в мире: с объединения двух строковых лите- ралов а именно - имени и фамилии: Выражение Результат Mike Hernandez MikeHernandez Здесь необходимо обсудить два момента. Во-первых, как имя, так и фамилию необходимо заключить в одиночные кавычки, потому что они являются строковыми литералами. Во-вторых, имя и фамилия в результате операции слились. Хотя операция выполнила правильное объединение, это не совсем то, что ожидалось. Решение состоит в добавлении между ними пробела. Выражение Результат Mike II Mike Hernandez Hernandez Сцвтвит Строковый АИтрОА Ссылка НО столбвц строковый APtrep ал Ссылка на столбец Рис. 5.5. Синтаксическая диаграмма для выражения-объединения Этот пример показывает, что можно объединять дополнительные символьные значения, используя несколько операторов сцепления. Ограничения на количество символьных значений, которые можно объединять, отсутствуют, но существует предел на максимальную длину символьной строки, которую возвращает операция сцепления. В общем случае длина символьной строки, возвращенной операцией сцепления, не может быть больше, чем максимальная длина, допустимая для данных типа Character переменной длины. В вашей СУБД этот вопрос может решиться немного иначе, поэтому уточните дополнительные детали в своей документации. Объединение двух или более символьных строк само по себе имеет смысл, но указанным способом также можно объединять значения двух и более столбцов. Предположим, имеется два столбца с именами CompanyName и City. Можно создать выражение, которое объединяет значения этих столбцов, используя их имена в выражении. В приведенном ниже примере выполняется объединение значений из этих столбцов в символьную строку: Выражение Результат CompanyName расположена в City DataTex Consulting Group расположена в Seattle В данном случае CompanyName или City не требуется заключать в одиночные кавычки, потому что это ссылки на столбцы. Ссылку на столбец можно использовать в выражении любого типа (как видно из примеров в остальной части книги). Можно также объединять даты или числа с символьными строками, но для этого необходимо использовать функцию CAST (см. рис. 5.6). Функция CAST преобразует значение литерала или значение столбца в конкретный тип данных. Это помогает гарантировать, что типы данных значений в выражении являются совместимыми . Все значения, которые используются в выражении, должны быть совместимы для того, чтобы операция, определенная в выражении, работала надлежащим образом. В противном случае СУБД обязательно выдаст сообщение об ошибке. Внимание! Каждая СУБД располагает функцией или набором функций, которые можно применять для преобразования типа данных. Хотя стандарт SQL явно определяет функцию CAST, она может и не использоваться в конкретной СУБД. Уточните детали в отношении функций преобразования, предусмотренных в вашей системе, в документации по системе базы данных. Функция CAST CAST Литеральное значение - Ссылка на с голо ей тип АОННЫХ Рис. 5.6. Синтаксическая диаграмма для функции CAST Преобразование значения литерала из одного типа данных в другой является относительно интуитивной и простой задачей. Однако при преобразовании значения столбца из его исходного типа данных в другой тип необходимо учитывать следующие ограничения: Значение символьного столбца переменной длины может усекаться (VARCHAR), если оно преобразуется в символьный столбец фиксированной длины (CHARACTER). СУБД должна вьщать предупре>вдение, что может произойти усечение. Символьный столбец можно преобразовать в любой другой тип данных, но значение столбца должно представлять собой допустимое значение литерала получаемого типа данных. Обратите внимание на то, что СУБД игнорирует все ведущие и/или концевые пробелы при преобразовании значения символьного столбца в числовое значение или значение дата/время. При преобразовании значения цифрового столбца в другой тип данных Numeric, СУБД выдаст ои1ибку, если значение не соответствует типу данных результата. Например, вероятно, будет получена ои1ибка, если попытаться преобразовать значение типа REAL, большее чем 32 767, в SMALLINT. К тому же при преобразовании числа с дробной частью в INTEGER или SMALLINT цифры справа от десятичной точки будут отброшены или округлены, в зависимости от ситуации. Результат усечения или округления определяется системой базы данных. При преобразовании значения цифрового столбца в тип данных Character будет получен один из трех возможных результатов: 1 - Преобразование выполнится успешно. 2. Результат будет дополнен пробелами, если его длина окажется меньше, чем длина, определенная для символьного столбца. 3. СУБД выдаст ошибку, если символьное представление цифрового значения длиннее, чем длина, определенная для символьного столбца. Внимание! Хотя Стандарт SQL определяет эти ограничения, ваша СУБД может дать некоторую свободу действий при преобразовании значения из одного типа данных в другой. За подробностями обратитесь к документации по вашей системе базы данных. Этот список включает не весь набор ограничений, определенных стандартом SQL. Здесь Перечислены только те ограничения, которые применяются к типам данных, используемым в данной книге. За более детальными сведениями обратитесь к любой из книг, приведенных в приложении С.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |