Без кейворда
вые сочетания 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]%
Life Without Fear
Каждая пара букв, заключенная в квадратные скобки, допускает сопоставления для прописных и строчных букв.
Другим вариантом является использование функции UPPER. Она преобразует строчные буквы поля в приписные буквы. Вот ее синтаксис:
После того как данные будут преобразованы в прописные буквы, LIKE сравнивает их с соответствующим шаблоном:
select title from titles
where upper(title) like %WITHOUT%
Такую запись легче читать и понимать, чем сам по себе синтаксис LIKE. В противоположность функции UPPER, функция LOWER преобразует прописные буквы поля в строчные буквы. Выясните, как в вашей системе с помощью этих функций обрабатываются слова с разнотипными буквами. В некоторых системах требуется двукратное использование функции UPPER (или LOWER) для учета любой комбинации прописных и строчных букв:
select title from titles
where upper(title) like upper ( %wiTHout% )
Может показаться, что простейшим ответом на проблему строчных и прописных букв является ввод информации буквами какого-то одного типа, который позволил бы избежать всей описанной выше работы. Однако не обольщайтесь раньше времени! Вы можете потерять важную информацию, которая потребуется вам в дальнейшем. Внутри многих фамилий используются как строчные, так и прописные буквы. Рассмотрим, например, фамилии Blotchett-Halls, DeFrance, OLeary, MacFeather и del Castillo, которые встречаются в базе данных bookbiz- Вы, вероятно, видели их записанными с необычными местоположениями прописных букв. Если вы сохранили их в виде только строчных (или только прописных) букв, то вам может впоследствии понадобиться восстановить их в первозданном виде, который вы совершенно сознательно нарушили.
Поиск символьных данных заданного размера
По-видимому, найти символьные данные какой-то определенной длины не представляет большой проблемы. Однако даже этот относительно простой случай имеет несколько интересных нюансов. Например, запрос на поиск всех авторов, имеюших четырехбуквенные имена, с использованием шаблонов диапазона в Transact-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 , вы должны будете применить следующий запрос:
select au fname from authors
where au fname like
Результат: au fname
Dick Burk Dirk Anne
Символ подчеркивания ( ) означает совпадение с любым символом. Однако результаты запроса будут зависеть от конкретной реализации вашей базы данных; могут, например, быть найдены имена, содержащие менее четырех букв, поэтому результаты могут выглядеть примерно так:
Результат: au fname
Это происходит в тех случаях, когда сравниваются две строки, и более короткая строка дополняется пробелами для выравнивания с более длинной строкой. Чтобы избежать возможной неоднозначности, воспользуйтесь кодом, подобным приведенному ниже. Здесь символ означает отрицание, поэтому ] означает не пробел .
select au fname from authors
where au fname like 1 [ ] [ ]
Результат: au fname
Anne Dirk Dick Burt
Теперь у вас есть список, каждое имя в котором состоит из четырех символов (за исключением пробела). Он не включает трехбуквенные имена или имена из трех букв и пробела.
А как найти авторов, имена которых не являются четырехбуквенными? Одним из вариантов решения этой задачи является вариант запроса, обратный приведенному выше:
select au fname from authors
where au fname not like [ ][ ][ ][]
Из базы данных bookbiz будет возврашено девятнадцать строк.
Как найти данные типа дат
Информацию о дате бывает нелегко найти из-за множества возможных способов ее хранения. В Transact-SQL поля даты включают месяц, день, год и время дня (первые три из этих полей можно отобразить несколькими способами).
Это создает определенные проблемы при поиске временной части поля по методу совпадения с шаблоном. В качестве примера можно привести следующий запрос: