powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / replace для многих вариантов слов в одном поле
9 сообщений из 34, страница 2 из 2
replace для многих вариантов слов в одном поле
    #38397181
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112а вообще, или курсором, или функцию типа такой

если сервер >=2005 то можно и одним запросом справится, с рекурсивным цте
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @train_raw table(id int identity, body varchar(max))
declare @stop_words table(word varchar(20))

insert into @train_raw (body)
select 'aaa ddd eee' union all
select 'aaa ddd eee vvv ttt uuu iii' union all
select 'ccc eee fff'

insert into @stop_words
select 'aaa' union all
select 'bbb' union all
select 'ccc' union all
select 'ddd'


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
-- ******************************
;with 
cte1 as (select *, row_number()over (order by (select 1)) as rn from @stop_words),

cte2 as (
select t.id, replace(t.body, cte1.word, '') as body, cte1.rn 
from @train_raw t cross join  cte1
where cte1.rn=1

union all

select t.id, replace(t.body, cte1.word, '') as body, cte1.rn 
from cte2 t inner join cte1 on t.rn=cte1.rn-1
)

update t
set t.body=a.body
from @train_raw t
inner join (select top 1 with ties * from cte2 order by rn desc) a
on t.id=a.id
-- ******************************

select * from @train_raw
...
Рейтинг: 0 / 0
replace для многих вариантов слов в одном поле
    #38397211
almaz1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112, Спасибо, мил человек)

Сработало:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE   FUNCTION deleteStopWords ( @body varchar(MAX) )
RETURNS varchar(MAX)
AS
BEGIN
	select @body=replace(@body, word, ' ')
	from stop_words
	--   
  	return @body
END



Код: sql
1.
2.
UPDATE dbo.train_raw
	SET body = dbo.deleteStopWords( body ) FROM dbo.train_raw, dbo.stop_words;
...
Рейтинг: 0 / 0
replace для многих вариантов слов в одном поле
    #38397212
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
almaz1988,

можно по аналогии - проверено - работает (а, вообще, qwerty112 - прав , с такими вопросами лучше в соседний форум)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare @i int
declare @j int = 1
declare @word varchar(1000)
select ROW_NUMBER() over (order by slovo) as n, slovo into #tt 
from dbo.Table_2
select @i = n from #tt
while @j <= @i
begin
select @word = slovo from #tt where n = @j
UPDATE dbo.Table_1
	SET текст = replace( текст, @word, '' ) FROM dbo.Table_1
set @j = @j + 1
end
drop table #tt
select * from dbo.Table_1
...
Рейтинг: 0 / 0
replace для многих вариантов слов в одном поле
    #38397213
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
almaz1988
Код: sql
1.
2.
UPDATE dbo.train_raw
	SET body = dbo.deleteStopWords( body ) FROM dbo.train_raw , dbo.stop_words;


а это (выделил) зачем ? это лишнее
...
Рейтинг: 0 / 0
replace для многих вариантов слов в одном поле
    #38398191
almaz1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,
Понял, учту)
Новую тему не стал создавать, раз уже была схожая.

Программирую в основном на С++, вот столкнулся с Sql. Так и подмывает все запросы писать как в Си через циклы while. Не могу пока привыкнуть к этой абстракции, когда любой запрос в Sql по-сути есть циклический перебор всех строк таблице, как например в:
Код: sql
1.
2.
select @body=replace(@body, word, ' ')
	from stop_words


когда в запросе происходит последовательный перебор всех строк таблицы stop_words и операция replace над входным аргументом @body


Спасибо всем за ответы).
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
replace для многих вариантов слов в одном поле
    #39883209
Ману
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет друзья! Помогите пожалуйста решить проблему Функция нормально работает, но если в строк таблиц нет данных ошибка показывает
надо так делать что массив в функции пустые строки тоже читал (например: a(1, 1) = "" a(1, 2) = ""но это не работаеть


Public Function AutoZamen(v As Variant) As Variant
Dim i As Integer
Dim a() As Variant

ReDim a(1 To 3, 1 To 2)
a(1, 1) = "авто"
a(1, 2) = "автомобиль"
a(2, 1) = "спец"
a(2, 2) = "специальность"
a(3, 1) = "универ"
a(3, 2) = "университет"
For i = 1 To 3 'цикл по именам
v = Replace(v, a(i, 1), a(i, 2))
Next
AutoZamen = v
End Function
...
Рейтинг: 0 / 0
replace для многих вариантов слов в одном поле
    #39883245
Сначала проверить IsNull(v), т.е.:
If IsNull(v) Then AutoZamen = Null: Exit Function
...
Рейтинг: 0 / 0
replace для многих вариантов слов в одном поле
    #39883259
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ману,

А зачем так?
Код: vbnet
1.
2.
3.
Dim a() As Variant

ReDim a(1 To 3, 1 To 2)

Сразу нельзя было?
Код: vbnet
1.
Dim a(1 To 3, 1 To 2) As String
...
Рейтинг: 0 / 0
replace для многих вариантов слов в одном поле
    #39883283
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ману, где-то я уже это видел...
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / replace для многих вариантов слов в одном поле
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]