Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Форматирование строки в запросе / 3 сообщений из 3, страница 1 из 1
23.05.2001, 12:40
    #32006074
Alexandr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование строки в запросе
Может, кто-нибудь подскажет, как можно отформатировать строку VARCHAR
из вида '21, 22, 23, 25' в вид '21-23, 25'?
Такой тяжелый случай, млин...
...
Рейтинг: 0 / 0
23.05.2001, 15:31
    #32006085
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование строки в запросе
У меня есть такая таблица, я её красиво назвал Millenium, в ней есть только одно поле num и в этой таблице вставлены числа от 0 до 999. Я кстати всем советую иметь такую таблицу. С помощью этой таблицы всё делается просто:

declare @s varchar(222)
select @s='21,22,23,24,25,27'

declare @n table( n int)

insert @n
select num from Millenium
where ','+@s+',' like '%,'+convert(varchar(5),num)+',%'
and ','+@s+',' like '%,'+convert(varchar(5),num-1)+',%'
and ','+@s+',' like '%,'+convert(varchar(5),num+1)+',%'

select @s=replace(@s,','+convert(varchar(5),n)+',', ',-,') from @n
select @s=replace(replace(replace(replace(@s,'-,','-'),',-','*'),'-',''),'*','-')
select @s

Ну единственно что пробелов в строке не должно быть, но, думаю, суть понятна, развить дальше сами сможете
...
Рейтинг: 0 / 0
23.05.2001, 15:55
    #32006091
AnKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование строки в запросе
Вот, в QA наваял, вроде работает. Можно, наверное в 2000 оформить в виде функции, не знаю - у меня 7.0.

declare @Str varchar(800)
declare @Res varchar(800)
declare @TmStr varchar(800)
declare @Delta int
declare @Min int
declare @Max int

set @Str='21,22,23,25,27,28,29,30,31,50'
set @Res=''

create table #Tmp(id int IDENTITY ,f int)
set @TmStr='insert #Tmp (f) select f from ( select f='+
REPLACE(@Str,',',' union select f=')+') as s order by f'
Exec(@TmStr)

set @Delta= (select top 1 f-id
from #Tmp
order by id)

while (select count (*) from #Tmp)!=0
begin --1
set @Delta= (select top 1 f-id
from #Tmp
order by id)

select @Min=min(f), @Max=max(f)
from #Tmp
where id=f-@Delta

delete from #Tmp
where id=f-@Delta

if @Max=@Min
set @Res=@Res+RTRIM(LTRIM(STR(@Max)))+','
else
set @Res=@Res+RTRIM(LTRIM(STR(@Min)))+'-'+RTRIM(LTRIM(STR(@Max)))+','
end --1

set @Res=SUBSTRING(@Res,1,LEN(@Res)-1)
select @Res
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Форматирование строки в запросе / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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