|
Программирование >> Преобразование значений null
При работе с кавычками необходимо помнить, что строковый литерал, состоящий только из двух кавычек, без символов между ними, соответствует пустой строке. Как подсчитать, сколько раз символ встречается в строке Задача Требуется подсчитать, сколько раз символ или подстрока встречаются в заданной строке. Рассмотрим следующую строку: 10,CLARK,MANAGER Необходимо определить количество запятых в строке. Решение Чтобы определить количество запятых в строке, вычтем ее длину без запятых из исходной длины. Каждая СУБД предоставляет функции для получения длины строки и удаления из нее символов. В большинстве случаев это функции LENGTH (длина) и REPLACE (заменить) соответственно (пользователям SQL Server вместо LENGTH предлагается встроенная функция LEN): 1 select (length(10,CLARK,MANAGER)- 2 length(replace(10,CLARK,MANAGER ,)))/length(,) 3 as cnt 4 from t1 Обсуждение Мы получили решение, используя простое вычитание. В результате вызова функции LENGTH в строке 1 получаем исходный размер строки, а вызов LENGTH в строке 2 возвращает размер строки без запятых, которые были удалены функцией REPLACE. Вычитая одну длину из другой, получаем разницу в символах, которая соответствует количеству запятых в строке. Последней операцией является деление на длину строки поиска. Эта операция необходима, если длина искомой строки более 1 символа. В следующем примере Далее представлено решение, разобранное по элементам. Имеются две внешние кавычки, определяющие строковый литерал, и в строковом литерале есть еще две кавычки, вместе представляющие всего одну кавычку строки, которую, фактически, мы и получаем: select as quote from t1 подсчет количества LL в строке HELLO HELLO без деления дает неверный результат: select (length(HELLO HELLO)- length(replace(HELLO HELLO,LL, )))/length(LL) as correct cnt, (length(HELLO HELLO)- length(replace(HELLO HELLO,LL,))) as incorrect cnt from t1 CORRECT CNT INCORRECT CNT Удаление из строки ненужных символов Задача Требуется удалить из данных определенные символы. Рассмотрим следующее результирующее множество:
Необходимо удалить все нули и гласные, чтобы получить значения, представленные в столбцах STRIPPED1 и STRIPPED2:
ADAMS DMS 1100 11 JAMES JMS 950 95 FORD FRD 3000 3 MILLER MLLR 1300 13 Решение Все СУБД предлагают функции для удаления ненужных символов из строки. Самыми полезными при решении данной задачи являются функции REPLACE и TRANSLATE. DB2 Для удаления ненужных символов и строк используйте встроенные функции TRANSLATE и REPLACE: 1 select ename, 2 replace(translate(ename,aaaaa,AEIOU),a,) stripped1, 3 sal, 4 replace(cast(sal as char(4)),0,) stripped2 5 from emp MySQL и SQL Server MySQL и SQL Server не предлагают функции TRANSLATE, поэтому приходится несколько раз вызывать REPLACE:
Oracle и PostgreSQL Для удаления ненужных символов и строк используйте встроенные функции TRANSLATE и REPLACE: 1 select ename, 2 replace(translate(ename,AEIOU,aaaaa),a) 3 as stripped1, 4 sal, 5 replace(sal,0,) as stripped2 6 from emp Обсуждение Встроенная функция REPLACE удаляет из строки все нули. Для удаления гласных применяется функция TRANSLATE, которая заменяет
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |