[mssql] string sort
От: InCodeWeTrust  
Дата: 30.08.18 15:04
Оценка:
Есть таблица столбец со строковыми данными.

'qwer'
'abcde'
'debac'
'deee'

без cte одним запросом надо вычислить стоки в которых символы идут по алфавиту

'abcde'
'deee'


sql server 2012
Отредактировано 30.08.2018 15:09 ГАИ . Предыдущая версия .
Re: [mssql] string sort
От: BlackEric http://black-eric.lj.ru
Дата: 30.08.18 16:06
Оценка:
Здравствуйте, InCodeWeTrust, Вы писали:

where field like '%[regexp который будет это фильтровать]%'
https://github.com/BlackEric001
Re[2]: [mssql] string sort
От: InCodeWeTrust  
Дата: 31.08.18 16:36
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>Здравствуйте, InCodeWeTrust, Вы писали:


BE>where field like '%[regexp который будет это фильтровать]%'


Ок насколько знаю в like патерне можно указать символ, но нельзя указать их кол-во, т.е. как быть со словами

вроде 'aaabbbccc' или 'xxxyzz'?

Так же like '%[a]*[b]*[c]*%' не напишешь.
Re[3]: [mssql] string sort
От: BlackEric http://black-eric.lj.ru
Дата: 31.08.18 18:17
Оценка:
Здравствуйте, InCodeWeTrust, Вы писали:

ICW>Ок насколько знаю в like патерне можно указать символ, но нельзя указать их кол-во, т.е. как быть со словами


ICW>вроде 'aaabbbccc' или 'xxxyzz'?


ICW>Так же like '%[a]*[b]*[c]*%' не напишешь.


Хз. Сделать какую-нибудь функцию для удаления повторяющихся символов.
Я не уверен, что это можно сделать одним запросом.
https://github.com/BlackEric001
Re[4]: [mssql] string sort
От: InCodeWeTrust  
Дата: 31.08.18 20:02
Оценка:
Здравствуйте, BlackEric, Вы писали:


BE>Хз. Сделать какую-нибудь функцию для удаления повторяющихся символов.

BE>Я не уверен, что это можно сделать одним запросом.

Скажу по секрет это вопрос с одного садисткого тестового ресурса по sql-ю. И эта задача имеет решение именно одним запросом.
Сам никак не соображу.

Вывести: список слов длиной не менее трех символов, каждое из которых представляет собой упорядоченную либо по убыванию,
либо по возрастанию последовательность латинских букв (т.е. ABCD или DCBA или ABBB, но не ABDC)

Отредактировано 31.08.2018 20:40 ГАИ . Предыдущая версия .
Re[5]: [mssql] string sort
От: BlackEric http://black-eric.lj.ru
Дата: 02.09.18 15:28
Оценка:
Здравствуйте, InCodeWeTrust, Вы писали:

ICW>

ICW>Вывести: список слов длиной не менее трех символов, каждое из которых представляет собой упорядоченную либо по убыванию,
ICW>либо по возрастанию последовательность латинских букв (т.е. ABCD или DCBA или ABBB, но не ABDC)


Так здесь нет повторяющихся символов. Это другая задача.
https://github.com/BlackEric001
Re[6]: [mssql] string sort
От: InCodeWeTrust  
Дата: 02.09.18 16:28
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>Здравствуйте, InCodeWeTrust, Вы писали:


ICW>>

ICW>>Вывести: список слов длиной не менее трех символов, каждое из которых представляет собой упорядоченную либо по убыванию,
ICW>>либо по возрастанию последовательность латинских букв (т.е. ABCD или DCBA или ABBB, но не ABDC)


BE>Так здесь нет повторяющихся символов. Это другая задача.


а это
(т.е. ABCD или DCBA или ABBB, но не ABDC)

даже без повторяющихся насколько возможно в патерне LIKE задать необязательный символ?
LIKE '[aA]*[bB]*[cC]*' так ведь не напишешь? А перебор всех возможных шаблонов нереален.
Отредактировано 02.09.2018 16:33 ГАИ . Предыдущая версия . Еще …
Отредактировано 02.09.2018 16:33 ГАИ . Предыдущая версия .
Re[7]: [mssql] string sort
От: BlackEric http://black-eric.lj.ru
Дата: 02.09.18 17:41
Оценка: 2 (1)
Здравствуйте, 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


В принципе, циклом по длине строки это можно развернуть для любой строки, но хз можно ли это по условию.
https://github.com/BlackEric001
Re[8]: [mssql] string sort
От: InCodeWeTrust  
Дата: 03.09.18 10:18
Оценка:
Здравствуйте, 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>
BE>Select * from bbb
BE>WHERE LEFT(value, 1) <= RIGHT(LEFT(value, 2), 1)  
BE>AND   RIGHT(LEFT(value, 2), 1) <= RIGHT(LEFT(value, 3), 1)
BE>AND   RIGHT(LEFT(value, 3), 1) <= RIGHT(LEFT(value, 4), 1)
BE>order by value
BE>GO
BE>


BE>В принципе, циклом по длине строки это можно развернуть для любой строки, но хз можно ли это по условию.


Цикл это про рекурсивную CTE? Нет нельзя ... все одним запросом. С СТЕ думаю смог бы решить. Садисткие задачи
Отредактировано 03.09.2018 10:21 ГАИ . Предыдущая версия .
Re: [mssql] string sort
От: rm822 Россия  
Дата: 03.09.18 12:30
Оценка: 110 (2)
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)
    )
Re[9]: [mssql] string sort
От: IZM  
Дата: 07.09.18 18:55
Оценка:
Через Like как раз можно попробовать решить.
делаем,например, все в Upper.
лайкать будем строку, полученную из 'A%B%C%D....%Z'
путем вырезания подстроки определенную 1-м символом значения в столбце и последним.
Но такое думаю будет работать только к подряд идущим символам.
строка 'ABCEF' из-за пропущенной буквы не найдется.

Тогда вариант преобразовать значение в столбце к виду '%A%B%C%D%' и делать
'ABCDE...Z' Like преобразованное поле.
Отредактировано 10.09.2018 14:09 IZM . Предыдущая версия . Еще …
Отредактировано 07.09.2018 19:23 IZM . Предыдущая версия .
Отредактировано 07.09.2018 19:21 IZM . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.