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

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

08.08.2019, 21:55. Показов 3700. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru