Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Форматирование строки в запросе
|
|||
|---|---|---|---|
|
#18+
Может, кто-нибудь подскажет, как можно отформатировать строку VARCHAR из вида '21, 22, 23, 25' в вид '21-23, 25'? Такой тяжелый случай, млин... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2001, 12:40 |
|
||
|
Форматирование строки в запросе
|
|||
|---|---|---|---|
|
#18+
У меня есть такая таблица, я её красиво назвал 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 Ну единственно что пробелов в строке не должно быть, но, думаю, суть понятна, развить дальше сами сможете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2001, 15:31 |
|
||
|
Форматирование строки в запросе
|
|||
|---|---|---|---|
|
#18+
Вот, в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2001, 15:55 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3574&tid=1826710]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 352ms |

| 0 / 0 |
