powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / функция замены подстрок из таблицы
11 сообщений из 11, страница 1 из 1
функция замены подстрок из таблицы
    #40076554
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица, в которой хранятся пары значений - что на что заменить.
Пытаюсь создать строковую ФУНКЦИЮ, которая будет преобразовывать строку на входе, применяя к ней все правила, в выходную строку. Помогите со скриптом плиз.
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076555
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
только курсор?
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076567
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
use tempdb;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create table dbo.Replacements (s varchar(100), s_replacement varchar(100));
insert into dbo.Replacements
values
 ('a', 'b'), ('c', 'd');
go

create function dbo.fnBatchReplace
(
 @s varchar(max)
)
returns varchar(max)
as
begin
 with r as
 (
  select top (cast(0x7fffffff as int))
   s, s_replacement
  from
   dbo.Replacements
  order by
   len(s) desc
 )
 select @s = replace(@s, s, s_replacement) from r;

 return @s;
end;
go

declare @s varchar(max) = 'acac';
select @s, dbo.fnBatchReplace(@s);
go

drop function dbo.fnBatchReplace;
drop table dbo.Replacements;
go
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076576
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=,

если без заморочек, то создайте CLR функцию на C#.

Текст на текст можно заменить при помощи patindex() + stuff().
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076577
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

вы всем так советуете эти функции... "В любой непонятной ситуации используйте CLR!"

Зачем здесь КЛР, если в задаче даже уже есть таблица?!!!


P.S. Особенно забавно в этой связи это ваше "без заморочек".
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076587
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь,

Неожиданный вывод :) Вы хотя бы следите за контекстом задачи, для который я даю такую рекомендацию. Неизвестный шаблон, неизвестный результат... Лучше всего работать со сложными решения для строк на C#, в этом языке достаточно развитые инструменты обработки строк.
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076590
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Код: sql
1.
select top (cast(0x7fffffff as int))


А чем
Код: sql
1.
select top 100 percent 


не устраивает?
Зачем такие сложные заморочки?
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076594
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Кесарь,

Неожиданный вывод :) Вы хотя бы следите за контекстом задачи, для который я даю такую рекомендацию. Неизвестный шаблон, неизвестный результат... Лучше всего работать со сложными решения для строк на C#, в этом языке достаточно развитые инструменты обработки строк.


В контексте задачи ничего не сказано, что сервер должен обработать ВНЕШНЕЕ входное значение. Логично предположить, что оное значение тоже получено для входа в функцию из какой-то таблицы.

Исходя из этого непонятно, зачем выходить вовне и потом возвращаться обратно внутрь.
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076595
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008
Зачем такие сложные заморочки?
Затем, что top (100) percent исключит из плана сортировку, а она нужна.
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076598
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=
только курсор?
Ну почему... можно и в рекурсивном CTE это сделать.

Не, бред, конечно, но ведь можно же! и даже можно сразу всю выборку прогнать через такую замену. Ресурсов, правда, она наест не по-детски...
...
Рейтинг: 0 / 0
функция замены подстрок из таблицы
    #40076604
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH
cte AS ( 
    SELECT id, value, 1 idx, value newvalue
    FROM data
    UNION ALL
    SELECT cte.id, 
           cte.value,
           cte.idx+1, 
           REPLACE(cte.newvalue, replacement.pattern, replacement.replacement)
    FROM cte
    JOIN replacement ON cte.idx = replacement.id )
SELECT id, value, newvalue
FROM cte 
WHERE idx = ( SELECT 1 + COUNT(*)
              FROM replacement )
ORDER BY id


https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6c0258e164b14c134d136954ab447914
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / функция замены подстрок из таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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