Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109

SQL запрос. Из названия нужно убрать лишнее слова по списку из другой таблицы

08.08.2019, 21:55. Показов 3777. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть столбик с названием продукта. Из названия нужно убрать лишнее слова. Список лишних слов находится в другой таблице.

На данный момент всё это делаю в Екселе с помощью Макрос.

Возможно так в SQL SERVER ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.08.2019, 21:55
Ответы с готовыми решениями:

Передача названия таблицы в sql запрос
Здрасте! Не получается...Пробую так: string reg = txtReg.text; string sql = String.Format("INSERT INTO {0} (, , , ) VALUES...

Нужно задать sql запрос. не понимаю как. Нужно из одной таблицы вывести данные
В общем, нужно задать sql запрос где будет подсчитано общее кол-во записей (name - название работ) и подсчитана сумма стоимости для...

Есть код. Нужно убрать лишнее
Здравствуйте! Есть код игры крестики-нолики, 5 в ряд. Как сделать так, чтобы оставался код только для 2-х игроков, и убрать ту часть, где...

21
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
09.08.2019, 08:01
vadca, конечно возможно
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 08:05  [ТС]
Гениально. Может есть предложение как это сделать ?
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
09.08.2019, 08:51
vadca,
SQL
1
SELECT * FROM Table1 WHERE ProductName NOT IN (SELECT UnnecessaryProduct FROM Table2)
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
09.08.2019, 11:25
AndreyVorobey,
хотелку ТС внимательно читал?
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
09.08.2019, 11:34
pincet, наверное...
Цитата Сообщение от vadca Посмотреть сообщение
Из названия нужно убрать лишнее слова
он хочет изменить имя поля?
Цитата Сообщение от vadca Посмотреть сообщение
убрать лишнее слова
удалить?
или, может, еще какой-то вариант?
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 11:50  [ТС]
Можно создать View в котором будут пропадать ненужные слова
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
09.08.2019, 12:28
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
или, может, еще какой-то вариант?
если я правильно понял ТС - то из "маргарин мать-его 30%" нужно убрать "мать-его"
1
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
09.08.2019, 12:31
vadca,
в первой таблице есть:
ProductName
продукт1
продукт2
продукт3
во второй таблице:
ProductName
продукт3
нужно на выходе получить так?
ProductName
продукт1
продукт2

pincet, скоро узнаем, что же он имел ввиду)
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 13:34  [ТС]
в первой таблице:
Unisex Tunic 491 Purple Care UK Tax Tab
BC Dress RC 5716 Lavender BR01 White

во второй:
Unisex
Tunic
Care
UK
Tax
TAB
BC
Dress
RC
Lavender

На выходе:
491 Purple
5716 BR01 White
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
09.08.2019, 13:57
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
create function dbo.fnEliminateWords
(
 @Value varchar(max),
 @WordsList varchar(max)
)
returns varchar(max)
as
begin
 declare @result varchar(max) = @Value;
 
 select
  @result = replace(@result, ltrim(rtrim(value)), '')
 from
  string_split(@WordsList, ',');
 
 return @result;
end;
go
 
declare @t table (s varchar(max));
declare @w table (w varchar(100));
 
insert into @t
values
 ('Unisex Tunic 491 Purple Care UK Tax Tab'),
 ('BC Dress RC 5716 Lavender BR01 White');
 
insert into @w
values
 ('Unisex'), ('Tunic'), ('Care'), ('UK'), ('Tax'), ('TAB'), ('BC'), ('Dress'), ('RC'), ('Lavender');
 
declare @WordsList varchar(max);
 
select
 @WordsList = string_agg(w, ',')
from
 @w;
 
select
 dbo.fnEliminateWords(s, @WordsList)
from
 @t;
go
 
drop function dbo.fnEliminateWords;
go
Лишние пробелы уберете сами.
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 14:21  [ТС]
Вместо:

C#
1
2
3
values
 ('Unisex Tunic 491 Purple Care UK Tax Tab'),
 ('BC Dress RC 5716 Lavender BR01 White');
C#
1
2
values
 (select nazvanie from table1;;



C#
1
2
3
insert into @w
values
 ('Unisex'), ('Tunic'), ('Care'), ('UK'), ('Tax'), ('TAB'), ('BC'), ('Dress'), ('RC'), ('Lavender');
C#
1
2
3
insert into @w
values
 (select lishnie_slova from table2;
Правильно ?

У меня SQL Server 2014
У меня ошибка при исполнение твоего кода:
Добавлено через 29 секунд
Msg 195, Level 15, State 10, Line 35
'string_agg' is not a recognized built-in function name.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
09.08.2019, 14:29
Лучший ответ Сообщение было отмечено vadca как решение

Решение

Цитата Сообщение от vadca Посмотреть сообщение
У меня SQL Server 2014
Тогда так
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
declare @t table (s varchar(max));
declare @w table (w varchar(100));
 
insert into @t
values
 ('Unisex Tunic 491 Purple Care UK Tax Tab'),
 ('BC Dress RC 5716 Lavender BR01 White');
 
insert into @w
values
 ('Unisex'), ('Tunic'), ('Care'), ('UK'), ('Tax'), ('TAB'), ('BC'), ('Dress'), ('RC'), ('Lavender');
 
select
 rtrim(c.x.value('./text()[1]', 'varchar(max)'))
from
 @t t cross apply
 (select cast(cast('' as xml).query('sql:column("t.s")') as varchar(max))) a(s) cross apply
 (select cast('<w>' + replace(a.s, ' ', '</w><w>') + '</w>' as xml)) b(x) cross apply
 (
  select
   wl.w + ' '
  from
   (select row_number() over (order by (select 1)), w.n.value('./text()[1]', 'varchar(100)') from b.x.nodes('w') w(n)) wl(rn, w)
  where
   not exists(select 1 from @w where w = wl.w)
  order by
   wl.rn
  for xml path(''), type
 ) c(x);
1
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
09.08.2019, 14:34
я так и думал. 1НФ сейчас немодно стало
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 14:57  [ТС]
Вот полный код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
declare @t table (s varchar(max));
declare @w table (w varchar(100));
 
insert into @t
 
 select pavadinimas from import_excel where order_nr='92458';
 
insert into @w
select slova from Slova;
 
select
 rtrim(c.x.value('./text()[1]', 'varchar(max)'))
from
 @t t cross apply
 (select cast(cast('' as xml).query('sql:column("t.s")') as varchar(max))) a(s) cross apply
 (select cast('<w>' + replace(a.s, ' ', '</w><w>') + '</w>' as xml)) b(x) cross apply
 (
  select
   wl.w + ' '
  from
   (select row_number() over (order by (select 1)), w.n.value('./text()[1]', 'varchar(100)') from b.x.nodes('w') w(n)) wl(rn, w)
  where
   not exists(select 1 from @w where w = wl.w)
  order by
   wl.rn
  for xml path(''), type
 ) c(x);

А как теперь сделать так, что бы видны были все исходные столбики и к ним добавить столбик с обрезанным названием. ?
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
12.08.2019, 16:30  [ТС]
invm, Помоги пожалуйста, как сделать что бы видны были все исходные столбики и к ним добавить столбик с обрезанным названием ?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
12.08.2019, 17:19
vadca,
T-SQL
1
2
3
4
...
select
 t.*, rtrim(c.x.value('./text()[1]', 'varchar(max)'))
...
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
12.08.2019, 18:00  [ТС]
invm, Спасибо. но ещё нужна помощь:

C#
1
2
3
4
5
6
7
8
9
insert into @t
 
 select pavadinimas, ModelID from import_excel where Order_nr='92458';
 
insert into @w
select slova from Slova;
 
select
 t.*, rtrim(c.x.value('./text()[1]', 'varchar(max)'))
когда добавляю нужные столбики, ошибка:

Msg 213, Level 16, State 1, Line 5
Column name or number of supplied values does not match table definition.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.08.2019, 09:27
vadca, ошибка ведь читабельна - Имя столбца или количество предоставленных значений не соответствует определению таблицы. достаточно сравнить входную выборку и выходную таблицу, чтобы понять, в чем проблема. или проще из-за каждого чиха писать на форум?
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
13.08.2019, 09:44  [ТС]
AndreyVorobey, я понимаю что там написано. Дело в том, что я этот код не писал и он мне не по силам.

Добавляя в первую таблицу столбики, мне во вторую добавлять ничего нинадо, там всегда только один столбик. А сервер рурается что не совподают количество столбиков между первой и второй таблицей. Значит проблема где то глубже. И я не знаю на неё ответ.

Добавлено через 4 минуты
Всё всётаки разобрался что к чему. Всем добра и спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.08.2019, 09:44
Помогаю со студенческими работами здесь

Нужно через sql запрос убрать дату из поля DataTime
Дорогие форумчане. Возникла новая проблема, на этот раз с выводом данных в DBGrid. У меня есть поле &quot;Время&quot; в БД Access, оно...

SQL запрос для выбора значений с 1 таблицы и отображения в другой
Здравствуйте! В общем у меня имеется 2 таблицы читатели и книги, и в 3 таблице нужно помимо имеющихся полей отобразить некоторые поля...

Создание временной таблицы,где ее название-переменная,названия столбцов-поля другой таблицы ..
Помогите,пож-ста,справиться со следующей проблемой. Есть главная таблица с полями:дата,игрок,время начала,время конца,номер корта. ...

AJAX: пробегаем по списку в DGW и для каждого элемента дергаем SQL-запрос
Здравствуйте. Пожалуйста, подскажите чайнику возможно ли в принципе то, что я пытаюсь наваять? Уже несколько дней бьюсь, jquery...

Мне нужно чтобы мой запрос возвращал названия по дате. То есть чтобы по дате сортировал названия
У меня есть запрос. В нем я хочу вывести по дате отсортировать все что я додал в БД и вывести public async...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru