Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
2 / 2 / 1
Регистрация: 18.10.2010
Сообщений: 113
1

Сортировать слова в поле, разделенные пробелами

17.02.2014, 12:47. Показов 2675. Ответов 11
Метки нет (Все метки)

Всем привет.

Вот меня есть таблица и в ней есть поле, в котором через пробел написаны слова. Мне нужно эти слова внутри поля отсортировать по алфавиту.
Подскажите пожалуйста как это сделать.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2014, 12:47
Ответы с готовыми решениями:

Дана строка, содержащая разделенные пробелами слова, вывести все слова-палиндромы
Дана строка, содержащая разделенные пробелами слова.Вивесты все имеющиеся слова-палиндлромы и их...

с ) Выведите из строки , содержащей слова , разделенные пробелами и запятыми , центральное слово ( если в предложении два центральных слова , выв
Помогите,пожалуйста ,с заданием ,совсем затупил:Выведите из строки,содержащей слова,разделенные...

Вывести слова в обратном порядке и разделенные пробелами
{ class Program { static void Main(string args) { string d = Console.ReadLine(); string words...

Удалите из строки, содержащей слова, разделенные пробелами, запятыми и точками
с) Удалите из строки, содержащей слова, разделенные пробелами, запятыми и точками, у которых первая...

11
1083 / 733 / 175
Регистрация: 27.11.2009
Сообщений: 2,178
17.02.2014, 14:12 2
Разобрать каждую строку на несколько, по одному слову в строке,
собрать первоначальные строки обратно, но в нужном порядке.
Всё это - в одном запросе!
1
2 / 2 / 1
Регистрация: 18.10.2010
Сообщений: 113
18.02.2014, 05:36  [ТС] 3
а можно мне пример?

До алгоритма я и сама догадалась, я не могу понять как это написать в запросе.
или хотя бы ссылки на статьи, в которых действительно показаны примеры. Потому что в яндексе я и сама наберу. Мне нужно помочь определить именно тот пример, который можно взять за основу.
0
1311 / 943 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
18.02.2014, 12:08 4
ыы... чем ссылки подбирать - проще написать...
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select s, stuff(x,1,1,'')+';' x
from (values ('   a         ccc    bb       ddd a      '))s(s)
cross apply(
   select ' '+c
   from (select replace(replace(replace(rtrim(ltrim(s)),space(2),space(1)+char(1)),char(1)+space(1),''),char(1),'')+space(1) t)t
   join master..spt_values v on v.type='P' and v.number between 1 and len(t)+1 and SUBSTRING(t,v.number,1)=space(1)
   outer apply(
      select top(1) n.number+1 n
      from master..spt_values n 
      where n.type='P' and n.number between 1 and v.number-1 and SUBSTRING(t,n.number,1)=space(1)
      order by n.number desc
      )n
   cross apply(
      select SUBSTRING(t,isnull(n,1),number-isnull(n,1))c
      )c
   order by c
   for xml path('')
   )x(x)
Код
s                                       |x
   a         ccc    bb       ddd a      |a a bb ccc ddd;
Добавлено через 26 минут
PS ну не хватает в MS SQL функции GROUP_CONCAT(expr)
1
3203 / 1941 / 689
Регистрация: 02.06.2013
Сообщений: 4,755
18.02.2014, 12:10 5
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
declare @t table (words varchar(100));
 
insert into @t
values
 ('  x t r aa '), ('gg bb xx ee');
 
select
 t.words, r.x.value('.', 'varchar(100)')
from
 @t t cross apply
 (select cast('<v><![CDATA[' + replace(replace(t.words, ']]>', ']]]]><![CDATA[>'), ' ', ']]></v><v><![CDATA[') + ']]></v>' as xml)) x(v) cross apply
 (select n.w + ' ' from (select n.value('.', 'varchar(100)') from x.v.nodes('v') a(n)) n(w) where n.w <> ' ' order by n.w for xml path(''), type) r(x);
2
1311 / 943 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
18.02.2014, 12:37 6
invm, круть)))

настолько глубоко в XML я еще не залезал)))
0
2 / 2 / 1
Регистрация: 18.10.2010
Сообщений: 113
18.02.2014, 13:28  [ТС] 7
А если вот допустим таблица называется "table" и поле в ней "words".

И вот в каждой содержимое этого поля "words" нужно так отсортировать. А потом записать это обратно.

То как такое сделать? Я совсем не понимаю запросах, которые мне здесь написали
0
3203 / 1941 / 689
Регистрация: 02.06.2013
Сообщений: 4,755
18.02.2014, 13:56 8
Лучший ответ Сообщение было отмечено Slafira как решение

Решение

Цитата Сообщение от Slafira Посмотреть сообщение
содержимое этого поля "words" нужно так отсортировать. А потом записать это обратно.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
declare @t table (words varchar(100));
 
insert into @t
values
 ('  x t r aa '), ('gg bb xx ee');
 
select * from @t;
 
update t
 set
  words = r.x.value('.', 'varchar(100)')
from
 @t t cross apply
 (select cast('<v><![CDATA[' + replace(replace(t.words, ']]>', ']]]]><![CDATA[>'), ' ', ']]></v><v><![CDATA[') + ']]></v>' as xml)) x(v) cross apply
 (select n.w + ' ' from (select n.value('.', 'varchar(100)') from x.v.nodes('v') a(n)) n(w) where n.w <> ' ' order by n.w for xml path(''), type) r(x);
 
select * from @t;
1
2 / 2 / 1
Регистрация: 18.10.2010
Сообщений: 113
18.02.2014, 14:11  [ТС] 9
Вот это что? Если таблица уже существует то оно не нужно?

Цитата Сообщение от invm Посмотреть сообщение
T-SQL
1
2
3
4
5
declare @t table (words varchar(100));
insert into @t
values
*(' *x t r aa '), ('gg bb xx ee');
select * from @t;
Добавлено через 7 минут
Все, разобралась получилось! Спасибо огроменное!!

зы еще нужно одинаковые слова там же удалить, если кто поможет буду рада
0
1083 / 733 / 175
Регистрация: 27.11.2009
Сообщений: 2,178
18.02.2014, 14:17 10
invm, а если разделители - любые символы из заданной строки разделителей,
и надо их все оставить на месте, а только слова переставить в другом порядке?
Можно так XMLем, а?

Подозреваю, что можно, но в XQuery полный чайник.
0
3203 / 1941 / 689
Регистрация: 02.06.2013
Сообщений: 4,755
18.02.2014, 14:58 11
iap, можно. Предварительно заменив все разделители любым из списка
А в XQuery тоже не особо силен, поэтому не знаю как это сделать на чистом XML.

А вообще, в этом случае эффективнее всего CLR-ная функция-обертка над Regex.Split.
1
1311 / 943 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
18.02.2014, 15:01 12
по-любому, нужно зафиксировать в FAQ "Преобразовать строку в список слов", ятд
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2014, 15:01

Удалить из строки повторяющиеся слова, разделенные пробелами, запятыми, точками
var a:string; b:arrayof string; c:arrayof integer; i,j,k:integer; begin writeln('vvedite...

В строке содержатся слова, разделенные пробелами. Создать массив из этих слов
Выводит строку по буквам. Подскажите пожалуйста, что нужно добавить/изменить, что бы выводило по...

В строке, содержащей слова, разделенные пробелами и запятыми, разверните указанное слово справа налево
Помогите пожалуйста решить задачу. В строке, содержащей слова, разделенные пробелами и запятыми,...

Слова исходной строки, разделенные одним или несколькими пробелами, переписывает в обратном порядке
Написать программу, которая слова исходной строки, разделенные одним или несколькими пробелами, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru