Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / функция замены подстрок из таблицы / 11 сообщений из 11, страница 1 из 1
09.06.2021, 11:05
    #40076554
=Сергей=
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция замены подстрок из таблицы
Есть таблица, в которой хранятся пары значений - что на что заменить.
Пытаюсь создать строковую ФУНКЦИЮ, которая будет преобразовывать строку на входе, применяя к ней все правила, в выходную строку. Помогите со скриптом плиз.
...
Рейтинг: 0 / 0
09.06.2021, 11:08
    #40076555
=Сергей=
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция замены подстрок из таблицы
только курсор?
...
Рейтинг: 0 / 0
09.06.2021, 11:47
    #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
09.06.2021, 12:16
    #40076576
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция замены подстрок из таблицы
=Сергей=,

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

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

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

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


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

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


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


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

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


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

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

Не, бред, конечно, но ведь можно же! и даже можно сразу всю выборку прогнать через такую замену. Ресурсов, правда, она наест не по-детски...
...
Рейтинг: 0 / 0
09.06.2021, 13:38
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / функция замены подстрок из таблицы / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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