Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Усечение строки  [new]
Nikitos2000
Member

Откуда:
Сообщений: 12
Народ, подскажите пож-та, как в MsSQL Server 2000 удалить ведущие нули в строке.
Т.е., есть строка(и) вида

0000010001001100
0000010001001101
...
0010001010110010

нужно что бы быо все то же самое, только начиная с 1.
10 авг 11, 12:40    [11096855]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
Гузы
Guest
Nikitos2000,

select cast(cast('0000010001001100' as bigint)as varchar(20))
10 авг 11, 12:45    [11096925]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
_ч_
Member

Откуда:
Сообщений: 1446

select CONVERT(VARCHAR(100), CONVERT(BIGINT, '0010001010110010'))
10 авг 11, 12:47    [11096948]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
Михаил Яковлев
Guest
Nikitos2000, может так?


declare @tab table (id int, name varchar(200))

insert into @tab values
(1, '0001100000'),
(2, '0100000'),
(3, '000011111'),
(4, '00110001100')

select * from @tab

update @tab
set name = ltrim(str(name))

select * from @tab
10 авг 11, 12:47    [11096953]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
Raoul
Member

Откуда:
Сообщений: 177
Nikitos2000
0000010001001100
0000010001001101
...
0010001010110010

нужно что бы быо все то же самое, только начиная с 1.

Решение для строки произвольной длины:
select REPLACE(LTRIM(REPLACE(MyColumn,'0',' ')),' ','0') from MyTable
10 авг 11, 12:58    [11097068]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
numbers
Guest
Nikitos2000,

declare @number varchar(100) = '0000010002003400'

declare @numbers table
(
  num varchar(100),
  pos int,
  startpos int,
  primary key clustered (pos)
)

;with nm (n, pos)
as
(
  select substring(@number, 1, 1), 1
  union all
  select substring(@number, pos+1, 1), pos+1
  from nm
  where pos < len(@number)
)
insert @numbers
select n1.*, n2.pos
from nm n1
cross apply
(
  select pos = min(pos)
  from nm n2
  where n2.n <> '0'
) n2

delete @numbers
where pos < startpos

declare @num varchar(100)

update nm set
  @num = num = ISNULL(@num, '') + nm.num
from @numbers nm

select num 
from @numbers nm1
where not exists(select * from @numbers nm2 where nm2.pos > nm1.pos)

10 авг 11, 12:59    [11097086]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
Nikitos2000
Member

Откуда:
Сообщений: 12
Михаил Яковлев,

всем спасибо. сделал через Cast(str as bigint)
10 авг 11, 13:05    [11097137]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Nikitos2000
Михаил Яковлев,

всем спасибо. сделал через Cast(str as bigint)
Делать надо было так: 11097068
10 авг 11, 13:05    [11097147]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
numbers
Guest
declare @numbers table ( num varchar(100) )

insert @numbers values ('0000010002003400')


;merge @numbers nm1
using
(
  select pos = patindex('%[^0]%', num)
  from @numbers
) nm2
on nm1.num = replicate('0', nm2.pos-1) + substring(nm1.num, nm2.pos, len(nm1.num))
when matched then
update set num = cast(nm2.pos as varchar(100))
output substring(deleted.num, cast(inserted.num as int), len(deleted.num))
;

10 авг 11, 13:15    [11097241]     Ответить | Цитировать Сообщить модератору
 Re: Усечение строки  [new]
numbers
Guest
Nikitos2000
Михаил Яковлев,

всем спасибо. сделал через Cast(str as bigint)


вы еще ИНН (ОКАТО, ОКПО и иже с ними) к инту поприводите
10 авг 11, 13:16    [11097257]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить