Oracle подсчитывает количество вхождений в строке

Обновлено: 02.07.2024

Вывод: в этом руководстве вы узнаете, как использовать функцию Oracle COUNT() для получения количества элементов в группе.

Синтаксис функции Oracle COUNT()

Функция Oracle COUNT() — это агрегатная функция, которая возвращает количество элементов в группе.

Синтаксис функции COUNT() следующий:

Функция COUNT() принимает условие, которое может быть ALL , DISTINCT или * :

  • Функция COUNT(*) возвращает количество элементов в группе, включая NULL и повторяющиеся значения.
  • Функция COUNT(DISTINCT expression) возвращает количество уникальных и ненулевых элементов в группе.
  • COUNT(ALL expression) оценивает выражение и возвращает количество ненулевых элементов в группе, включая повторяющиеся значения.

Если вы явно не укажете DISTINCT или ALL , функция COUNT() по умолчанию использует ALL.

Обратите внимание, что в отличие от других агрегатных функций, таких как AVG() и SUM() , функция COUNT(*) не игнорирует значения NULL.

Примеры COUNT() для Oracle

Давайте рассмотрим несколько примеров использования функции COUNT().

A) COUNT(*) vs COUNT(DISTINCT expr) vs COUNT(ALL)

Давайте создадим таблицу с именем items, состоящую из столбца val, и вставим в нее несколько примеров данных для демонстрации.

Следующий оператор использует функцию COUNT(*) для возврата количества строк в таблице элементов, включая NULL и повторяющиеся значения:

Следующий оператор использует COUNT(DISTINCT val) для возврата только количества различных и отличных от NULL строк из таблицы элементов:

В следующем операторе функция COUNT(ALL val) используется для возврата количества ненулевых строк в таблице элементов с учетом дубликатов.

B) Простой пример Oracle COUNT()

В следующем примере возвращается количество строк в таблице товаров:

C) Пример Oracle COUNT() с предложением WHERE

Если вы хотите найти количество продуктов в категории с идентификатором 1, вы можете добавить предложение WHERE в приведенный выше запрос:

D) Пример Oracle COUNT() с предложением GROUP BY

Чтобы найти количество продуктов в каждой категории продуктов, используйте следующую инструкцию:

В этом примере

  • Во-первых, предложение GROUP BY делит товары на группы на основе категории товаров ( category_id ).
  • Во-вторых, функция COUNT(*) возвращает количество товаров для каждой группы.

E) Oracle COUNT() с предложением LEFT JOIN

В следующих примерах все названия категорий и количество продуктов в каждой категории получаются путем объединения product_categories с таблицей products и использования функции COUNT() с предложением GROUP BY.

Oracle COUNT — пример с ЛЕВЫМ СОЕДИНЕНИЕМ

F) Пример Oracle COUNT() с предложением HAVING

Следующий оператор извлекает названия категорий и количество продуктов в каждой. Кроме того, он использует предложение HAVING для возврата единственной категории, в которой количество продуктов больше 50.

 Oracle COUNT - с примером HAVING

G) Использование Oracle COUNT() и предложения HAVING для поиска повторяющихся значений

Вы можете использовать функцию COUNT() и предложение HAVING для поиска строк с повторяющимися значениями в указанном столбце.

Например, следующая инструкция возвращает несколько фамилий контактов:

 Oracle COUNT - найти повторяющиеся значения

В этом заявлении:

  • Во-первых, предложение GROUP BY делит строки в таблице контактов на группы на основе значений в столбце last_name.
  • Во-вторых, функция COUNT() возвращает количество одинаковых фамилий для каждой фамилии.
  • Наконец, предложение HAVING возвращает только те группы, которые имеют более одного значения фамилии.

В этом руководстве вы узнали, как использовать функцию Oracle COUNT() для возврата количества элементов в группе.

REGEXP_COUNT дополняет функциональные возможности функции REGEXP_INSTR, возвращая количество раз, когда шаблон встречается в исходной строке. Функция оценивает строки, используя символы, определенные входным набором символов. Он возвращает целое число, указывающее количество вхождений шаблона. Если совпадений не найдено, функция возвращает 0.

source_char — это символьное выражение, которое служит значением поиска.Обычно это символьный столбец, который может относиться к любому из типов данных CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB или NCLOB .

шаблон является регулярным выражением. Обычно это текстовый литерал, который может относиться к любому из типов данных CHAR, VARCHAR2, NCHAR или NVARCHAR2. Он может содержать до 512 байт. Если тип данных шаблона отличается от типа данных source_char , то Oracle Database преобразует шаблон в тип данных source_char .

REGEXP_COUNT игнорирует круглые скобки части выражения в шаблоне . Например, шаблон «(123(45))» эквивалентен «12345». Список операторов, которые можно указать в шаблоне, см. в Приложении C, "Поддержка регулярных выражений Oracle".

position — положительное целое число, указывающее символ source_char, с которого Oracle должен начать поиск. Значение по умолчанию равно 1, что означает, что Oracle начинает поиск с первого символа source_char. Найдя первое вхождение pattern , база данных ищет второе вхождение, начиная с первого символа, следующего за первым вхождением.

match_param – это текстовый литерал, который позволяет изменить поведение функции при сопоставлении по умолчанию. Вы можете указать одно или несколько следующих значений для match_param :

'i' указывает соответствие без учета регистра.

'c' указывает соответствие с учетом регистра.

'n' позволяет точке (.), которая соответствует любому символу, совпадать с символом новой строки. Если вы опустите этот параметр, точка не будет соответствовать символу новой строки.

'm' рассматривает исходную строку как несколько строк. Oracle интерпретирует знак вставки (^) и знак доллара ($) как начало и конец, соответственно, любой строки в любом месте исходной строки, а не только в начале или конце всей исходной строки. Если вы опустите этот параметр, Oracle будет рассматривать исходную строку как одну строку.

'x' игнорирует пробельные символы. По умолчанию пробельные символы совпадают друг с другом.

Если указать несколько противоречащих друг другу значений, Oracle использует последнее значение. Например, если вы укажете 'ic', Oracle будет использовать сопоставление с учетом регистра. Если вы укажете символ, отличный от показанных выше, Oracle вернет ошибку.

Если вы опустите match_param , то:

Чувствительность к регистру по умолчанию определяется значением параметра NLS_SORT.

Точка (.) не соответствует символу новой строки.

Исходная строка рассматривается как одна строка.

В следующем примере показано, что круглые скобки подвыражений в шаблоне игнорируются:

В следующем примере функция начинает оценивать исходную строку с третьего символа, поэтому пропускает первое вхождение шаблона:

В этом руководстве по Oracle объясняется, как использовать функцию Oracle/PLSQL REGEXP_COUNT с синтаксисом и примерами.

Описание

Функция Oracle/PLSQL REGEXP_COUNT подсчитывает, сколько раз шаблон встречается в строке. Эта функция, представленная в Oracle 11g, позволит вам подсчитать, сколько раз подстрока встречается в строке, используя сопоставление с шаблоном регулярного выражения.

Синтаксис

Синтаксис функции REGEXP_COUNT в Oracle:

Параметры или аргументы

Информация о сопоставлении с регулярным выражением. Это может быть комбинация следующих действий:

< tr> < td>Соответствует одному элементу сопоставления, который может содержать более одного символа.
Значение Описание
^ Соответствует началу строки. При использовании с параметром match_parameter, равным 'm', он соответствует началу строки в любом месте выражения.
$ Соответствует концу строки. При использовании с параметром match_parameter, равным 'm', он соответствует концу строки в любом месте выражения.
* Соответствует нулю или более вхождений.
+ Соответствует одному или нескольким вхождениям.
? Соответствует нулю или одному вхождению.
. Соответствует любому символу, кроме NULL.
| Используется как "ИЛИ" для указания более чем одной альтернативы.
[ ] Используется для указания списка соответствия, в котором вы пытаетесь сопоставить любой из символов в списке.
[^ ] Используется для указания несовпадающего списка, в котором вы пытаетесь сопоставить любой символ, кроме символов в списке.
() Используется для группировки выражений как подвыражение.
Соответствует m раз.
Соответствует не менее m раз.
Соответствует не менее m раз, но не более n раз.
\n n — число от 1 до 9. Соответствует n-му подвыражению, найденному в ( ), до встречи с \n.
[..]
[::] Соответствует классам символов.
[==] Соответствует классам эквивалентности.
\d Соответствует символу цифры.
\D Соответствует нецифровому символу.
\w Соответствует словесному символу.
\W Соответствует несловесному символу.
\s Соответствует пробелу.
\S соответствует непробельному символу.
\A соответствует началу строки или совпадает в конце строки перед символом новой строки.
\Z Соответствует концу строки.
*? Соответствует предыдущему шаблону, ноль или более вхождений.
+? Соответствует предшествующий шаблону одно или несколько вхождений.
?? Соответствует нулю или одному предшествующему шаблону.
? Соответствует предыдущему шаблону n раз.
? Соответствует предыдущему шаблону не менее n раз.< /td>
? Соответствует предыдущий шаблон не менее n раз, но не более m раз.
start_position Необязательный. Это позиция в string, с которой начнется поиск. Если он опущен, по умолчанию он равен 1, который является первой позицией в строке. match_parameter

Необязательно. Он позволяет изменить поведение сопоставления для функции REGEXP_COUNT. Это может быть комбинация следующих действий:

< td>Выполнять сопоставление с учетом регистра.< td>'n' Предполагается, что
Значение Описание
'c'
'i' Выполнять сопоставление без учета регистра.
Позволяет символу точки (.) соответствовать символу новой строки. По умолчанию точка является подстановочным знаком.
'm'выражение состоит из нескольких строк, где ^ — это начало строки, а $ — это конец строки, независимо от положения этих символов в выражении. По умолчанию выражение считается одной строкой.
'x' Пробелы игнорируются. По умолчанию пробельные символы сопоставляются так же, как и любые другие символы.

Возврат

Функция REGEXP_COUNT возвращает числовое значение.

  • Если для match_parameter предоставлены конфликтующие значения, функция REGEXP_COUNT будет использовать последнее значение.
  • Если вы опустите параметр match_behavior, функция REGEXP_COUNT будет использовать параметр NLS_SORT, чтобы определить, следует ли использовать поиск с учетом регистра. символ точки для соответствия любому символу (не символу новой строки).
  • Если функция REGEXP_COUNT не находит ни одного вхождения шаблона, она возвращает 0.

Применимо к

Функция REGEXP_COUNT может использоваться в следующих версиях Oracle/PLSQL:

Пример — Совпадение по одному символу

Начнем с самого простого случая. Давайте подсчитаем, сколько раз символ 't' появляется в строке.

В этом примере будет возвращено 2, так как он подсчитывает количество вхождений 't' в строку. Поскольку мы не указали значение match_parameter, функция REGEXP_COUNT будет выполнять поиск с учетом регистра, что означает, что символы 'T' не будут включены в подсчет.

Если бы мы хотели включить в результаты как 't', так и 'T' и выполнить поиск без учета регистра, мы могли бы изменить наш запрос следующим образом:

Теперь, поскольку мы указали start_position, равное 1, и match_parameter, равное 'i', запрос вернет 4 в качестве результата. На этот раз в подсчет будут включены как значения 't', так и 'T'.

Если бы мы хотели подсчитать количество букв 't' в столбце, мы могли бы попробовать что-то вроде этого:

Это подсчитает количество значений 't' или 'T' в поле last_name из таблицы contacts.

Пример — совпадение нескольких символов

Давайте рассмотрим, как использовать функцию REGEXP_COUNT для сопоставления многосимвольного шаблона.

В этом примере будет возвращено количество раз, которое слово 'the' встречается в строке. Он будет выполнять поиск без учета регистра, поэтому он вернет 2.

В этом примере будет возвращено количество раз, когда слово 'the' появляется в строке, начиная с позиции 4. В этом случае будет возвращено 1, поскольку будут пропущены первые 3 символа в строке перед поиском узор.

Теперь давайте посмотрим, как мы будем использовать функцию REGEXP_COUNT со столбцом таблицы и искать несколько символов.

В этом примере мы собираемся подсчитать количество вхождений 'the' в поле other_comments в таблице contacts.

Пример. Соответствие более чем одной альтернативе

Следующий пример, который мы рассмотрим, включает использование | шаблон.| шаблон используется как "ИЛИ" для указания более чем одной альтернативы.

В этом примере будет возвращено 2, так как он подсчитывает количество гласных (a, e, i, o или u) в строке "Андерсон". Поскольку мы не указали значение match_parameter, функция REGEXP_COUNT будет выполнять поиск с учетом регистра, что означает, что буква «A» в слове «Anderson» не будет учитываться.

Мы могли бы изменить наш запрос следующим образом, чтобы выполнить поиск без учета регистра следующим образом:

Теперь, поскольку мы указали start_position, равное 1, и match_parameter, равное 'i', запрос вернет 3 в качестве результата. На этот раз в счет будет включена буква "А" в слове "Андерсон".

Вопрос. Что делает оператор regexp_count? Можете ли вы показать пример использования regexp_count?

Ответ: regexp_count подсчитывает количество вхождений строки. Oracle 11g расширяет набор доступных выражений с помощью REGEXP_COUNT.

ВЫБЕРИТЕ
ENAME,
REGEXP_SUBSTR(ENAME,'DAM') SUBSTR,
REGEXP_INSTR(ENAME, 'T') INSTR,
REGEXP_REPLACE(ENAME,'AM', '@') REPLACE,
REGEXP_COUNT(ENAME, 'A') COUNT
FROM
EMP
WHERE
REGEXP_LIKE(ENAME, 'S');

ENAME SUBSTR INSTR REPLACE COUNT
---------- ---------- ---------- -------- -- ----------
СМИТ 4 СМИТ 0
ДЖОНС 0 ДЖОНС 0
СКОТТ 4 СКОТТ 0
АДАМС ДЭМ 0 AD@S 2
>ДЖЕЙМС 0 ДЖ@ЭС 1

regexp_count

Синтаксис: regexp_count(источник, шаблон, позиция, параметры)

Как и в случае с другими функциями REGEXP, в regexp_count источником может быть строковый литерал, переменная или столбец. Шаблон представляет собой регулярное выражение, а позиция указывает символ в источнике, с которого начинается поиск. По умолчанию 1 или первый символ. Параметры сопоставления такие же, как и в других функциях REGEXP.

выберите
regexp_count('Мы едем на юг через юго-восток', 'юг')
из двойного;
2

Используя то, что Oracle называет шаблонами под влиянием Perl, можно подсчитать количество слов.

выберите
regexp_count('Мы едем на юг через юго-восток', '\w+')
из двойного;
7

У Boobal Ganesan есть следующие заметки о regexp_count:

Эта функция появилась в Oracle 11g и позволяет нам подсчитать, сколько раз шаблон или подстрока встречается в исходной строке. Это очень отличается от простой функции COUNT, которая является функцией уровня столбца, тогда как REGEXP_COUNT – это функция уровня ячейки, которая работает с каждой ячейкой отдельно.

Прототип функции REGEXP_COUNT показан ниже,

· Source_string: искомая строка.

· Search_pattern: Шаблон регулярного выражения, который следует искать в исходной строке. Это может быть комбинация метасимволов POSIX и Perl, упомянутых в предыдущем разделе.

· Start_position: Это необязательный параметр. Это определяет позицию в исходной строке, с которой начинается поиск. По умолчанию это 1, что является начальной позицией исходной строки.

· Match_modifiers: Это необязательный параметр. Этот параметр позволяет нам изменить соответствующее поведение функции. Допустимый диапазон параметров указан в разделе Модификаторы сопоставления шаблонов, описанном выше.

Основная операция, которую можно выполнить с помощью этой функции, — это подсчет символа или последовательности символов в исходной строке, как показано ниже.

SELECT REGEXP_COUNT («REGEXP_COUNT — это функция уровня ячейки, которая работает с каждой ячейкой отдельно», 'cell', 1) regexp_count

Следующий оператор ищет количество числовых цифр, присутствующих в исходной строке, с использованием метасимвола \d под влиянием Perl.

SELECT REGEXP_COUNT ('REGEXP_COUNT введено в версии Oracle 11gR1', '\d', 1) regexp_count

В приведенном ниже списке подсчитывается общее количество гласных в исходной строке с включенной по умолчанию проверкой чувствительности к регистру (на основе параметра NLS_SORT).

SELECT REGEXP_COUNT («REGEXP_COUNT — это функция уровня ячейки, которая работает с каждой ячейкой отдельно», «[aeiou]», 1) regexp_count

Тот же фрагмент снова используется для подсчета гласных, но на этот раз с отключенной чувствительностью к регистру путем установки модификатора соответствия i вручную.

SELECT REGEXP_COUNT («REGEXP_COUNT — функция уровня ячейки, которая работает с каждой ячейкой отдельно», '[aeiou]', 1, 'i') regexp_count

Общее количество слов в исходной строке можно найти с помощью приведенного ниже оператора. Шаблон поиска «[^ ]+» проверяет наличие символов, отличных от пробела «[^ ]», за которым следует один или несколько символов, отличных от пробела, с помощью оператора «+».

SELECT REGEXP_COUNT ('REGEXP_COUNT представлен в версии Oracle 11gR1', '[^ ]+',1) regexp_count

Общее количество символов в исходной строке можно узнать с помощью приведенного ниже оператора. Шаблон поиска «( .)» ищет все возможные символы в исходной строке.

SELECT REGEXP_COUNT ('REGEXP_COUNT представлен в версии Oracle 11gR1', '(.)', 1) regexp_count

Общее количество символов DOT в исходной строке можно найти с помощью приведенного ниже оператора запроса. Шаблон поиска «\.» ищет литерал DOT в исходной строке. Поскольку DOT является метасимволом, он экранируется с помощью обратной косой черты оператора экранирования «\».

SELECT REGEXP_COUNT ('В этой.строке.есть.семь.точек.', '\.',1) regexp_count

Обучение Oracle от Дона Берлесона

Лучшие на сайте «Учебные курсы Oracle» находятся на расстоянии одного телефонного звонка! Вы можете пройти индивидуальное обучение Oracle от Дональда Берлесона прямо в своем магазине!

Консультации и обучение Oracle

Бурлесон — американская команда


Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Читайте также: