|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
Добрый день! Подскажите следующий вопрос. Хочу В ЗАПРОСЕ заменить определенные значения в поле на другие. Насколько я понимаю, возможно заменить только одно определенное значение (возможно повторяющееся несколько раз) в один запрос. Вопрос в следующем, возможно ли заменить несколько значений за один запрос, типа так: REPLACE (поле1, "john","vova" на "johny", "vovan") - такая идея REPLACE (поле1, "john", на "johny") - так стандартно Конечно без "на" :), это для лучшего понимания. Если через sql никак, может кто подскажет что-нибудь на vba! Спасибо за помощь!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 12:05 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
Вложенные реплэйсы REPLACE (Replace(поле1, "john", "johny"),"vova", "vovan") ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 12:18 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
MaximuS_G, этот вариант mds_world'а хорош, но повторный Replace, по моим представлениям, способен испортить записи, когда одна комбинация букв заменяется другой, а следующая комбинация включает предыдущую. Так что будьте аккуратны. Кроме того, не очень красиво было бы писать вложенный Replace, когда замен несколько. Вполне вероятно, что вам потребуется либо выполнить несколько SELECT'ов (объедините их по UNION), либо напишите свою функцию, которая один массив слов заменяет на другой массив слов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 12:31 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
mds_world , CoolMind Спасибо большое за помощь! Маленький вопросик по поводу функции для замены массивов. Насколько я понял, писать эту функцию надо в vba (не представляю как...пока), но как совместить запрос sql и vba. Я имеею ввиду, необходимо заменить то в запросе, как в это время запустить макрос в vba ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 12:38 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
А каким боком можно использовать реплэйс в запросе на обновление (не догнал) IIF(....) можно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 12:45 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
MaximuS_GНасколько я понял, писать эту функцию надо в vba (не представляю как...пока), но как совместить запрос sql и vba. Я имеею ввиду, необходимо заменить то в запросе, как в это время запустить макрос в vba ?В запросе можно использовать вызовы ваших public-функций UPDATE Таблица SET Поле = MyFunction() ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 12:53 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
CoolMindВполне вероятно, что вам потребуется либо выполнить несколько SELECT'ов (объедините их по UNION)... Интересный вариант. Пожалуйста, расскажите поподробнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:05 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
Restavraciya Насколько я помню я нигде не упоминал про запрос на обновление :) непоймучка Опять же запрос не обязательно на обновление... как запустить свою функцию, например, в запросе на выборку? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:13 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
MaximuS_G, вам потребуется использовать такой запрос: Код: plaintext 1.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:15 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
Туплю, во-первых, функция будет Public, а не Private. Во-вторых, если это запрос Update, а не Select, то никакой UNION не применить Так что, tobor , ваш укол здесь уместен :) В-третьих, если это даже SELECT, то всё равно, я не знаю, что будет после применения UNION... Лучше их запустить последовательно. Так что, tobor, вы меня правильно спросили... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:19 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
toborCoolMindВполне вероятно, что вам потребуется либо выполнить несколько SELECT'ов (объедините их по UNION)... Интересный вариант. Пожалуйста, расскажите поподробнее. Мне кажется, чтов этом случае вы получите набор записей, в каждой из которых будет произведена только одна "атомарная" замена. В принципе, для того, чтобы получить цепь замен, в каждой из последующих надо пользоваться выходом предшествующей. Но CoolMind прав в другом - при "вложеных" заменах верояно появление случайных ложных подстрок. Чтобы такого избежать можно каждый "атом" замены сопровождать специальным дополнительным символом, который заведомо не встречается в выборке. А потом, в окончательном реплейсе заменить этот символ на пустой. Скажем, так Replace(REPLACE (Replace(поле1, "john", "johny|"),"vova", "vovan|"),"|", "") ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:24 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
MaximuS_GОпять же запрос не обязательно на обновление... как запустить свою функцию, например, в запросе на выборку?да точно так же SELECT Поле1, MyFunction1(Поле1) AS F1 FROM Таблица ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:29 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
mds_world, совершенно с Вами согласен... написал тогда и не подумал :) мне кажется, в этом случае надо добавлять не только справа, но и слева "|"... ну для уменьшения вероятности повтора символов... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:37 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
CoolMind Я в access не очень разбираюсь, так что будет пару вопросов :) Функция swap: Redim a(1 to 3, 1 to 2) a(1, 1) = "john" a(1, 2) = "jonhy" ... ' создали массив имен 'можна здесь по подробнее, не могу понять что такое v, и какое количество значений у нее в конце, когда swap = v ? for i = 1 to 3 'цикл по именам v = Replace(v, a(i, 1), a(i, 2)) next Swap = v mds_world , CoolMind Очень интересует вопрос о появлении новых значений, вообще не могу понять как они появятся ? Буду благодарен за любой (самый примитивный) пример! непоймучка Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 13:53 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
MaximuS_G, я не проверял, поэтому могу ошибиться. Функция Swap (вы можете придумать и другое имя) принимает аргумент (параметр) типа Variant и возвращает значение типа Variant. Это означает, что вы выбираете значения из таблицы, которые могут быть как строками, так и Null (в некоторых строках таблицы значения могут быть не инициализированы, а в некоторых стоят имена), а потому они входят в тип Variant. Так вот, переменная v - это то поле из таблицы, которое Вы собираетесь вставить в Swap. Вы же хотите преобразовывать значения поля в другие значения, функция swap как раз тем и занята: на вход вы ей даёте одну фразу, на выходе из неё вы получаете изменённую фразу и можете скопировать обратно в поле. Пример появления новых значений, суперпозиция нескольких функций: Допустим, вы заменяете "тополь" на "ива", "ива" на "Иван". В этом случае фраза "Тополь кивал головой" в разных вариантах может быть заменён так: "Тополь кивал головой" -> "Ива кивал головой" -> "иван киванл головой" или "Тополь кивал головой" -> "Тополь киванл головой" -> "ива киванл головой". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 14:14 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
Если есть словарь в виде таблицы, где каждому значению одной строки (имени) соответствует другая строка (имя), то можно запрос SELECT поле1 ... объединить с другим запросом, тогда и замена будет проще. Допустим, что у тебя есть таблица (словарь) из двух полей: имя1, имя2 (john -> johny, ...) А может, и нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 14:23 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
MaximuS_G Restavraciya Насколько я помню я нигде не упоминал про запрос на обновление :) непоймучка Опять же запрос не обязательно на обновление... как запустить свою функцию, например, в запросе на выборку?А вы чтоли написали "запрос на выборку" ? Не лечи и думай когда задаеш вопросы ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 14:37 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
CoolMind Насколько я понял левые значения могут появится, только если я работаю со похожими значениями... но если я заменяю каждый раз совершенно разные значения, то такого быть не может?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 14:49 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
MaximuS_G, не знаю вашу систему данных, но складывается впечатление, что замены вы хотите производить не внутри произвольного текста, а отдельных слов, т.е. сочетаний символов, либо разделенных пробелами, либо стоящих в начале фразы или заканчивающих фразу. Т.е. в строке "иван|кивает|на|петра а петр|на|ивана" по разделителю пробел, есть три отдельных единицы подлежащих возможной замене. Это "иван|кивает|на|петра", "а" и "петр|на|ивана". А если заменить "|" на пробел: "иван кивает на петра а петр на ивана", то отдельных частей становится 8. Если так, то действие вложенных реплейсов (или показанная выше процедура) не точны, так как не отличают полного слова от подстрок, составленных из частей слова. И вам надо будет еще до замен, сначала разделить фразу на слова (по каталогу разделителей), а потом уже менять отдельные слова. Кстати, разделителями могут служить не только пробелы, но и точки, запятые, вопросительные, восклицательные знаки и т.д. Вообще, разбор тестов далеко не всегда тривиальная задача. Даже, скорее, наоборот, редко когда анализ и разбор текстов делается просто и легко. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 15:18 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
mds_world Спасибо, большое. Мне действительно было необходимо заменять всего одно слово в записи, то-есть я не работал с предложениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2009, 18:14 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
Здравствуйте, подскажите пожалуйста как выкрутиться если в строке необходимо выполнить замену уж очень большого количества слов, которые содержатся в отдельной таблице, состоящей из одного столбца, т.е. replace( @Строка, @заменяемая_подстрока, ' ' ), где @заменяемая_подстрока - столбец из другой таблицы. Заменяю на пробел, - т.е. удаляю слова. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 18:20 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
Делаю так: USE facebook DECLARE @word varchar(1000); SELECT @word = word FROM dbo.stop_words; UPDATE dbo.train_raw SET body = replace( body, @word, '' ) FROM dbo.train_raw; Но удаляется только последнее слово из таблицы stop_words ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 18:40 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
almaz1988Делаю так: USE facebook DECLARE @word varchar(1000); SELECT @word = word FROM dbo.stop_words; UPDATE dbo.train_raw SET body = replace( body, @word, '' ) FROM dbo.train_raw; Но удаляется только последнее слово из таблицы stop_words Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 21:30 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
guest_rusimport, авторUPDATE dbo.train_raw, dbo.stop_words SET dbo.train_raw.body = replace(dbo.train_raw.body, dbo.stop_words.word, '') выдает ошибку: Не удалось привязать составной идентификатор "dbo.stop_words.word". Следующий код удаляет только первую подстроку из таблицы stop_words: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 22:02 |
|
replace для многих вариантов слов в одном поле
|
|||
---|---|---|---|
#18+
almaz1988guest_rusimport, авторUPDATE dbo.train_raw, dbo.stop_words SET dbo.train_raw.body = replace(dbo.train_raw.body, dbo.stop_words.word, '') выдает ошибку: Не удалось привязать составной идентификатор "dbo.stop_words.word". Следующий код удаляет только первую подстроку из таблицы stop_words: Код: sql 1. 2. 3.
дык, а что вы с МС СКЛ -ем в Акцессе спрашиваете ? а вообще, или курсором, или функцию типа такой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
использовать в запросе UPDATE ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 23:29 |
|
|
start [/forum/topic.php?fid=45&fpage=25&tid=1610401]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 148ms |
0 / 0 |