Вывод людей в имени которых минимум 2 буквы "а"

Передо мной стоит задача, вывести людей в имени которых минимум 2 буквы "а". Я сделал так

SELECT * FROM employees WHERE CHARINDEX ( 'a', 'first_name') > 2

Но это явно не так. Использую MsSQL и синтаксис T-SQL


Ответы (2 шт):

Автор решения: CrazyElf

Ну тупо можно сделать так:

SELECT * FROM employees WHERE CHARINDEX('a', first_name, CHARINDEX('a', first_name)) > 0

Хотя я не очень понял откуда считается start_location, возможно, туда нужно будет прибавить 1 и тогда будет так:

SELECT * FROM employees WHERE CHARINDEX('a', first_name, CHARINDEX('a', first_name) + 1) > 0
→ Ссылка
Автор решения: Yitzhak Khabinsky

Другой универсальный метод.

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, first_name NVARCHAR(30));
INSERT INTO @tbl (first_name) VALUES
(N'Петр'),
(N'Николай'),
(N'Марина'),
(N'Наташа');
-- DDL and sample data population, end

DECLARE @StringToFind NCHAR(1) = N'а';

-- just to see
SELECT ID, first_name
    , (LEN(first_name) - LEN(REPLACE(first_name, @StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind), 0), 1) AS cnt
FROM @tbl;

;WITH rs AS
(
    SELECT ID, first_name
        , (LEN(first_name) - LEN(REPLACE(first_name, @StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind), 0), 1) AS cnt
    FROM @tbl
)
SELECT * FROM rs
WHERE cnt > 1;

Output

+----+------------+-----+
| ID | first_name | cnt |
+----+------------+-----+
|  3 | Марина     |   2 |
|  4 | Наташа     |   3 |
+----+------------+-----+
→ Ссылка