Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Количество букв  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Приветствую форумчан!

Как можно узнать количество видов букв в слове, если:
- буквы только на английском или на кириллице;
- прописные и строчные буквы считать как 1 буква;
- все другие символы (пробел, точка, запетая, цифры и т.д.) игнорируются.
Пример:
"Александр" - 8, ибо буква "а" хоть и встречается 2 раза, но ее нужно считать как одна буква.

Спасибо заранее.
20 ноя 14, 06:56    [16875834]     Ответить | Цитировать Сообщить модератору
 Re: Количество букв  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
 declare @word varchar(100)= 'Александр'

;WITH Numbers(N) AS(SELECT 1 UNION ALL SELECT N+1 FROM Numbers WHERE N<=255) 
 SELECT COUNT(DISTINCT CASE WHEN (N BETWEEN 97 AND 122) OR (N BETWEEN 224 AND 255) 
			 THEN N-32 ELSE N END) AS N
 FROM Numbers 
 WHERE (N BETWEEN 65 AND 90
	 OR N BETWEEN 97 AND 122
	 OR N BETWEEN 192 AND 233
	 OR N BETWEEN 224 AND 255)
 AND @word like '%'+CHAR(N)+'%'	 
	
 OPTION(MAXRECURSION 0);
20 ноя 14, 07:22    [16875849]     Ответить | Цитировать Сообщить модератору
 Re: Количество букв  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
LexusR,

Вроде бы оно! :)
Thank you very much!
20 ноя 14, 07:33    [16875863]     Ответить | Цитировать Сообщить модератору
 Re: Количество букв  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
маленькая поправка - не OR N BETWEEN 192 AND 233 а OR N BETWEEN 192 AND 223

 declare @word varchar(100)= 'Александр'

;WITH Numbers(N) AS(SELECT 1 UNION ALL SELECT N+1 FROM Numbers WHERE N<=255) 
 SELECT COUNT(DISTINCT CASE WHEN (N BETWEEN 97 AND 122) OR (N BETWEEN 224 AND 255) 
			 THEN N-32 ELSE N END) AS N
 FROM Numbers 
 WHERE (N BETWEEN 65 AND 90
	 OR N BETWEEN 97 AND 122
	 OR N BETWEEN 192 AND 223
	 OR N BETWEEN 224 AND 255)
 AND @word like '%'+CHAR(N)+'%'	 
	
 OPTION(MAXRECURSION 0);
20 ноя 14, 07:49    [16875880]     Ответить | Цитировать Сообщить модератору
 Re: Количество букв  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
если привести к верхнему регистру то будет проще
declare @word varchar(100)= 'Александр'
;WITH Numbers(N) AS(SELECT 1 UNION ALL SELECT N+1 FROM Numbers WHERE N<=223) 
 SELECT COUNT(DISTINCT N) AS N
 FROM Numbers 
 WHERE (N BETWEEN 65 AND 90
	 OR N BETWEEN 192 AND 223)
 AND upper(@word) like '%'+CHAR(N)+'%'	 
 OPTION(MAXRECURSION 0);
20 ноя 14, 07:53    [16875889]     Ответить | Цитировать Сообщить модератору
 Re: Количество букв  [new]
WildMage
Member

Откуда:
Сообщений: 5297
Надо задачи на sql-ex.ru самому решать.
20 ноя 14, 08:14    [16875944]     Ответить | Цитировать Сообщить модератору
 Re: Количество букв  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
WildMage
Надо задачи на sql-ex.ru самому решать.

Не поверите, но это вовсе не вымышленная задачка. На работе пришлось отобрать записи из около 800 тыс. по хитроумной маске. Решение LexusR здорово помогло мне. Спасибо ещё раз ему.
20 ноя 14, 16:46    [16880072]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить