Здравствуйте, InCodeWeTrust, Вы писали:
ICW>Ок насколько знаю в like патерне можно указать символ, но нельзя указать их кол-во, т.е. как быть со словами
ICW>вроде 'aaabbbccc' или 'xxxyzz'?
ICW>Так же like '%[a]*[b]*[c]*%' не напишешь.
Хз. Сделать какую-нибудь функцию для удаления повторяющихся символов.
Я не уверен, что это можно сделать одним запросом.
BE>Хз. Сделать какую-нибудь функцию для удаления повторяющихся символов. BE>Я не уверен, что это можно сделать одним запросом.
Скажу по секрет это вопрос с одного садисткого тестового ресурса по sql-ю. И эта задача имеет решение именно одним запросом.
Сам никак не соображу.
Вывести: список слов длиной не менее трех символов, каждое из которых представляет собой упорядоченную либо по убыванию,
либо по возрастанию последовательность латинских букв (т.е. ABCD или DCBA или ABBB, но не ABDC)
ICW>Вывести: список слов длиной не менее трех символов, каждое из которых представляет собой упорядоченную либо по убыванию,
ICW>либо по возрастанию последовательность латинских букв (т.е. ABCD или DCBA или ABBB, но не ABDC)
Так здесь нет повторяющихся символов. Это другая задача.
Здравствуйте, BlackEric, Вы писали:
BE>Здравствуйте, InCodeWeTrust, Вы писали:
ICW>>
ICW>>Вывести: список слов длиной не менее трех символов, каждое из которых представляет собой упорядоченную либо по убыванию,
ICW>>либо по возрастанию последовательность латинских букв (т.е. ABCD или DCBA или ABBB, но не ABDC)
BE>Так здесь нет повторяющихся символов. Это другая задача.
а это
(т.е. ABCD или DCBA или ABBB, но не ABDC)
даже без повторяющихся насколько возможно в патерне LIKE задать необязательный символ?
LIKE '[aA]*[bB]*[cC]*' так ведь не напишешь? А перебор всех возможных шаблонов нереален.
Здравствуйте, InCodeWeTrust, Вы писали:
ICW>даже без повторяющихся насколько возможно в патерне LIKE задать необязательный символ?
like 'a%'
ICW>LIKE '[aA]*[bB]*[cC]*' так ведь не напишешь? А перебор всех возможных шаблонов нереален.
У меня для фиксированной длины (4 символа) получается так:
Select * from bbb
WHERE LEFT(value, 1) <= RIGHT(LEFT(value, 2), 1)
AND RIGHT(LEFT(value, 2), 1) <= RIGHT(LEFT(value, 3), 1)
AND RIGHT(LEFT(value, 3), 1) <= RIGHT(LEFT(value, 4), 1)
order by value
GO
В принципе, циклом по длине строки это можно развернуть для любой строки, но хз можно ли это по условию.
Здравствуйте, BlackEric, Вы писали:
BE>Здравствуйте, InCodeWeTrust, Вы писали:
ICW>>даже без повторяющихся насколько возможно в патерне LIKE задать необязательный символ?
BE>
BE>like 'a%'
BE>
Да работает,
select *
from (values('abcde'),('edcba'),('aabbccdd')) [a]([s])
where a.s like 'a%b%c%'
но по идее надо задавать кучу шаблонов 'a%b%c%' or 'a%b%c%d%' or (и так далее). При это такой же сет для строк начинающихся с 'b', потом с 'c'.
Все потому что нет как в регексах (предыдуший знак или отсутсвует или сколь угодно раз). Т.е. я так понимаю с помощью like данная задача решения не имеет.
ICW>>LIKE '[aA]*[bB]*[cC]*' так ведь не напишешь? А перебор всех возможных шаблонов нереален.
BE>У меня для фиксированной длины (4 символа) получается так: BE>
ICW>без cte одним запросом надо вычислить стоки в которых символы идут по алфавиту
а в чем сложность?
select * from (Values ('qwer'),('abcde'),('debac'),('deee')) T(v)
where
NOT EXISTS(
select 1
from master..spt_values N
where N.type = 'P' and N.number < len(v)
and N.number <> 0 and substring(v, N.number+1, 1) < substring(v, N.number, 1)
)
Через Like как раз можно попробовать решить.
делаем,например, все в Upper.
лайкать будем строку, полученную из 'A%B%C%D....%Z'
путем вырезания подстроки определенную 1-м символом значения в столбце и последним.
Но такое думаю будет работать только к подряд идущим символам.
строка 'ABCEF' из-за пропущенной буквы не найдется.
Тогда вариант преобразовать значение в столбце к виду '%A%B%C%D%' и делать
'ABCDE...Z' Like преобразованное поле.