Программирование >>  Руководство по sql 

1 ... 73 74 75 [ 76 ] 77 78 79 ... 105


вые сочетания 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



1 ... 73 74 75 [ 76 ] 77 78 79 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика