Программирование >>  Преобразование значений null 

1 ... 40 41 42 [ 43 ] 44 45 46 ... 219


При работе с кавычками необходимо помнить, что строковый литерал, состоящий только из двух кавычек, без символов между ними, соответствует пустой строке.

Как подсчитать, сколько раз символ встречается в строке

Задача

Требуется подсчитать, сколько раз символ или подстрока встречаются в заданной строке. Рассмотрим следующую строку:

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

Удаление из строки ненужных символов Задача

Требуется удалить из данных определенные символы. Рассмотрим следующее результирующее множество:

ENAME

SMITH

ALLEN

1b00

WARD

1250

JONES

2975

MARTIN

1250

BLAKE

2850

CLARK

2450

SCOTT

3000

KING

5000

TURNER

1500

ADAMS

1100

JAMES

FORD

3000

MILLER

1300

Необходимо удалить все нули и гласные, чтобы получить значения,

представленные в столбцах STRIPPED1 и STRIPPED2:

ENAME

STRIPPED1

STRIPPED2

SMITH

SMTH

ALLEN

1b00

WARD

1250

JONES

2975

2975

MARTIN

MRTN

1250

BLAKE

2850

CLARK

CLRK

2450

SCOTT

SCTT

3000

KING

5000

TURNER

TRNR

1500



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:

select

ename,

replace(

replace(

replace(

replace(

replace(ename,A,),E,),I,),O,),U,)

as stripped1,

sal,

replace(sal,0,) stripped2

from

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, которая заменяет



1 ... 40 41 42 [ 43 ] 44 45 46 ... 219

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