|
Программирование >> Руководство по sql
вые сочетания NULL и пустых строк. После этого он очищает их с помощью оператора UPDATE. Знакомясь с последующим материалом, вы узнаете, как найти следующее. Символьные данные, когда вы не уверены в том, как они представлены (прописными, строчными или разнотипными буквами). Символьные строки заданной длины. Данные типа дат. Нулевые данные, маскирующиеся под пробелы. Сопоставление прописных и строчных букв Иногда данные хранятся в виде прописных букв ( COMPUTER ), иногда - в виде строчньгх букв ( computer ), а иногда - в виде разнотипных букв ( Computer ). Это может отражать отсутствие стандартов на момент ввода данных и, следовательно, отсутствие проверок на целостность. Допустим, к примеру, что вы хотите определить, как именно называется книга, заглавие которой звучит то ли как Life Without Fear, то ли как Life without Fear. Короче говоря, вы не помните точно, как в данном случае пищется слово without - с прописной или строчной буквы. Существует ряд способов, помогающих рещить данную проблему. Можно воспользоваться ключевым словом LIKE, как в следующем примере: SQL: select title from titles where title like % [Ww] [li] [Tt] [Hh] [Oo] [Uu] [Tt]% Результат: title Life Without Fear Каждая пара букв, заключенная в квадратные скобки, допускает сопоставления для прописных и строчных букв. Другим вариантом является использование функции UPPER. Она преобразует строчные буквы поля в приписные буквы. Вот ее синтаксис: UPPER(символьное выражение) После того как данные будут преобразованы в прописные буквы, LIKE сравнивает их с соответствующим шаблоном: SQL: select title from titles where upper(title) like %WITHOUT% Такую запись легче читать и понимать, чем сам по себе синтаксис LIKE. В противоположность функции UPPER, функция LOWER преобразует прописные буквы поля в строчные буквы. Выясните, как в вашей системе с помощью этих функций обрабатываются слова с разнотипными буквами. В некоторых системах требуется двукратное использование функции UPPER (или LOWER) для учета любой комбинации прописных и строчных букв: SQL: select title from titles where upper(title) like upper ( %wiTHout% ) Может показаться, что простейшим ответом на проблему строчных и прописных букв является ввод информации буквами какого-то одного типа, который позволил бы избежать всей описанной выше работы. Однако не обольщайтесь раньше времени! Вы можете потерять важную информацию, которая потребуется вам в дальнейшем. Внутри многих фамилий используются как строчные, так и прописные буквы. Рассмотрим, например, фамилии Blotchett-Halls, DeFrance, OLeary, MacFeather и del Castillo, которые встречаются в базе данных bookbiz- Вы, вероятно, видели их записанными с необычными местоположениями прописных букв. Если вы сохранили их в виде только строчных (или только прописных) букв, то вам может впоследствии понадобиться восстановить их в первозданном виде, который вы совершенно сознательно нарушили. Поиск символьных данных заданного размера По-видимому, найти символьные данные какой-то определенной длины не представляет большой проблемы. Однако даже этот относительно простой случай имеет несколько интересных нюансов. Например, запрос на поиск всех авторов, имеюших четырехбуквенные имена, с использованием шаблонов диапазона в Transact-SQL (квадратных скобок, заключающих в себе символы диапазона строчных или прописных букв, разделенные дефисом) мог бы выглядеть следующим образом: SQL: select au fname from authors where au fname like [A-Z] [a-z] [a-z] [a-z] Результат: au fname Dick Burk Dirk Anne Проверьте, есть ли в вашей системе подобные функции. Такой запрос будет работать удовлетворительно до тех пор, пока имена авторов будут начинаться с прописной буквы и содержать только алфавитные символы. Чтобы в базе данных можно было отыскивать имена вроде А-Ро и Lto , вы должны будете применить следующий запрос: SQL: select au fname from authors where au fname like Результат: au fname Dick Burk Dirk Anne Символ подчеркивания ( ) означает совпадение с любым символом. Однако результаты запроса будут зависеть от конкретной реализации вашей базы данных; могут, например, быть найдены имена, содержащие менее четырех букв, поэтому результаты могут выглядеть примерно так: Результат: au fname Anne Dirk Dick Burt Это происходит в тех случаях, когда сравниваются две строки, и более короткая строка дополняется пробелами для выравнивания с более длинной строкой. Чтобы избежать возможной неоднозначности, воспользуйтесь кодом, подобным приведенному ниже. Здесь символ означает отрицание, поэтому ] означает не пробел . SQL: select au fname from authors where au fname like 1 [ ] [ ] Результат: au fname Anne Dirk Dick Burt Теперь у вас есть список, каждое имя в котором состоит из четырех символов (за исключением пробела). Он не включает трехбуквенные имена или имена из трех букв и пробела. А как найти авторов, имена которых не являются четырехбуквенными? Одним из вариантов решения этой задачи является вариант запроса, обратный приведенному выше: SQL: select au fname from authors where au fname not like [ ][ ][ ][] Из базы данных bookbiz будет возврашено девятнадцать строк. Как найти данные типа дат Информацию о дате бывает нелегко найти из-за множества возможных способов ее хранения. В Transact-SQL поля даты включают месяц, день, год и время дня (первые три из этих полей можно отобразить несколькими способами). Это создает определенные проблемы при поиске временной части поля по методу совпадения с шаблоном. В качестве примера можно привести следующий запрос: SQL: select price, pubdate from titles where pubdate = Oct 21 1985 Результат: price pubdate 21.59 Oct 21 1985 12 : 00AM 20.95 Oct 21 1985 12 : 00AM
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |