Вывод людей в имени которых минимум 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 |
+----+------------+-----+