Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заменить последовательности цифр в числе на их кол-во t-sql / 4 сообщений из 4, страница 1 из 1
14.11.2021, 17:44
    #40111918
alexvrm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить последовательности цифр в числе на их кол-во t-sql
Добрый вечер. Задача такая: все последовательности одинаковых цифр в числе заменить на их количество. Выполнить с помощью t-sql

Например, дано число 336704445, на выходе должно получиться 267035. желательно в виде цикла и как нибудь по простому. максимум что получилось, это удалить такие последовательности. буду благодарен за помощь
...
Рейтинг: 0 / 0
15.11.2021, 12:13
    #40112034
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить последовательности цифр в числе на их кол-во t-sql
alexvrm,

На коленке писал этот говнокод...
Код: 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.
declare @sExpression varchar(200) = '336704445'
declare @sResult varchar(200) = ''

declare @i smallint  = 1
declare @j smallint = 0

declare @CharPrevios char(1)
declare @CharNow char(1)


while @i < = Len(@sExpression)
 begin
   set @CharNow = SUBSTRING(@sExpression, @i, 1)
   set @CharPrevios = SUBSTRING(@sExpression, @i-1, 1)
   if @i>1 and @CharNow <> @CharPrevios
    begin
      if @j>1 set @sResult = @sResult + CAST(@j as varchar(3))
	   else set @sResult = @sResult + @CharPrevios
	  set @j = 0 
    end
   set @j = @j + 1
   set @i = @i + 1
end
if Len(@sExpression)>1 and @CharNow <> @CharPrevios
 set @sResult = @sResult + @CharNow

select @sResult

...
Рейтинг: 0 / 0
15.11.2021, 12:35
    #40112042
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить последовательности цифр в числе на их кол-во t-sql
там в конце забыл добавить
Код: sql
1.
 else if Len(@sExpression)>1 set @sResult = @sResult + CAST(@j as varchar(3))
...
Рейтинг: 0 / 0
15.11.2021, 13:56
    #40112077
spenov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить последовательности цифр в числе на их кол-во t-sql
alexvrm,

Код: 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.
declare @s varchar(max)='336704445';

with 
  d as (--таблица с строкой под каждый символ
    select 
         chpos=row_number() over (order by 1/0)
      from string_split(replicate(' ,', datalength(@s)-1), ',')
  )
 ,c as (--разделение строки на символы и порядковый номер в строке
    select
         ch=substring(@s, chpos, 1)
        ,chpos
      from d
  )
 ,q as (--определение последовательностей в строке
    select 
         c.ch
        ,firstch=min(c.chpos)
        ,lastch=max(n.chpos)
      from c
	  join c n on n.ch=c.ch and n.chpos>c.chpos
	  where not exists(select *
	                     from c m
	                     where ch<>c.ch
	                       and chpos between c.chpos and n.chpos)
      group by c.ch
  )
  --получение итоговой строки
  select STRING_AGG(iif(q.ch is null, c.ch, cast(q.lastch-q.firstch+1 as varchar)),'') 
    from c
	left join q on q.firstch=c.chpos
	where not exists(select * --исключить символы, входящие в последовательность
	                   from q m
	                   where firstch<c.chpos
	                     and lastch>=c.chpos)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заменить последовательности цифр в числе на их кол-во t-sql / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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