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

Например, дано число 336704445, на выходе должно получиться 267035. желательно в виде цикла и как нибудь по простому. максимум что получилось, это удалить такие последовательности. буду благодарен за помощь
...
Рейтинг: 0 / 0
Заменить последовательности цифр в числе на их кол-во t-sql
    #40112034
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Заменить последовательности цифр в числе на их кол-во t-sql
    #40112042
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там в конце забыл добавить
Код: sql
1.
 else if Len(@sExpression)>1 set @sResult = @sResult + CAST(@j as varchar(3))
...
Рейтинг: 0 / 0
Заменить последовательности цифр в числе на их кол-во t-sql
    #40112077
spenov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заменить последовательности цифр в числе на их кол-во t-sql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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