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

Откуда:
Сообщений: 69
Добрый день, подскажите пожалуйсто как удалить лидирующие нули из строк :
set @s = '12-000064'
set @s = '12-010'
set @s = '114-0001001'


т.е.
должно получиться :

12-64
12-10
114-1001

я что-то не придумал ничего рабочего,

интересно как сделать правильно, подскажите пожалуйста.
13 июл 16, 16:47    [19405251]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
o-o
Guest
какие-то нули не совсем лидирующие.
тире гарантировано в строках или нет?
13 июл 16, 17:00    [19405342]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
Вя4еслаw
Member

Откуда:
Сообщений: 69
o-o,
да, "-" всегда есть
13 июл 16, 17:10    [19405402]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
trdm_
Member

Откуда: г. Ростов-на-Дону
Сообщений: 766
set @s = '114-0001001'
set @s = REPLACE(@s,'-0000000000','-')
set @s = REPLACE(@s,'-000000000','-')
set @s = REPLACE(@s,'-00000000','-')
set @s = REPLACE(@s,'-0000000','-')
set @s = REPLACE(@s,'-000000','-')
set @s = REPLACE(@s,'-00000','-')
set @s = REPLACE(@s,'-0000','-')
set @s = REPLACE(@s,'-000','-')
set @s = REPLACE(@s,'-00','-')
set @s = REPLACE(@s,'-0','-')
Select @s
13 июл 16, 17:15    [19405424]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
o-o
Guest
ну вот такая фигнища тогда:
declare @t table(s varchar(100));
insert into @t
values
('12-000064'),
('12-010'),
('114-0001001');

select s,
       left(s, charindex('-',s)) + substring(substring(s, charindex('-',s) + 1, 100), 
       PATINDEX('%[1-9]%',substring(s, charindex('-',s) + 1, 100)), 100)
from @t;

здесь 100 это макс. длина
13 июл 16, 17:20    [19405456]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
правильный проходящий.
Guest
trdm_,

declare @s varchar(20)
set @s = '114-0001001'
;with cte as (select CHARINDEX('-', @s) as n) 
select substring(@s, 1, n) + cast(cast(substring(@s, n+1, 20) as int) as varchar) from cte
13 июл 16, 17:26    [19405489]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
Вя4еслаw
Member

Откуда:
Сообщений: 69
trdm_,

План прост, потому красив)))
13 июл 16, 17:31    [19405517]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
o-o
Guest
если нулей может быть сотня,
будет еще красивше, екран разорвет
13 июл 16, 17:32    [19405530]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
Вя4еслаw
Member

Откуда:
Сообщений: 69
Всем спасибо за подсказки))
13 июл 16, 17:36    [19405563]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
declare @t table(s varchar(100));
insert into @t
values
('12-000064'),
('12-010'),
('114-0001001');

select s,
stuff(s,charindex('0',s),len(left(reverse(left(reverse(s),charindex('-',reverse(s))-1)),patindex('%[1-9]%',reverse(left(reverse(s),charindex('-',reverse(s))-1)))-1)),'')
from @t
13 июл 16, 17:37    [19405565]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
правильный проходящий.
Guest
o-o
ну вот такая фигнища тогда:
declare @t table(s varchar(100));
insert into @t
values
('12-000064'),
('12-010'),
('114-0001001');

select s,
       left(s, charindex('-',s)) + substring(substring(s, charindex('-',s) + 1, 100), 
       PATINDEX('%[1-9]%',substring(s, charindex('-',s) + 1, 100)), 100)
from @t;

здесь 100 это макс. длина
Мой вариант слегка переделанный под ваш источник данных :)
;with cte as (select s, CHARINDEX('-', s) as n from @t) 
select left(s, n) + cast(cast(substring(s, n+1, len(s)) as int) as varchar) from cte
13 июл 16, 17:40    [19405593]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
trdm_
Member

Откуда: г. Ростов-на-Дону
Сообщений: 766
Вя4еслаw
trdm_,

План прост, потому красив)))

Я всего лишь дал направление.
13 июл 16, 17:41    [19405603]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
John Lenon
Member

Откуда:
Сообщений: 5
declare @str varchar(32);
set @str = '114-00064000'

select 
  left(@str,charindex('-',@str)) + convert(varchar(32),convert(int,right(@str,len(@str)-charindex('-',@str))))


Не за что)
13 июл 16, 17:48    [19405640]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
o-o
Guest
John Lenon
declare @str varchar(32);
set @str = '114-00064000'

select 
  left(@str,charindex('-',@str)) + convert(varchar(32),convert(int,right(@str,len(@str)-charindex('-',@str))))


Не за что)


declare @str varchar(32);
set @str = '114-000640001111111111111'

select 
  left(@str,charindex('-',@str)) + convert(varchar(32),convert(int,right(@str,len(@str)-charindex('-',@str))))

Msg 248, Level 16, State 1, Line 4
The conversion of the varchar value '000640001111111111111' overflowed an int column.
13 июл 16, 18:05    [19405757]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
DECLARE @S VARCHAR(100)='114-0001001';

SELECT LEFT(@S,CHARINDEX('-',@S))+REPLACE(LTRIM(REPLACE(STUFF(@S,1,CHARINDEX('-',@S),''),'0',' ')),' ','0');
13 июл 16, 19:39    [19406283]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
o-o
если нулей может быть сотня,
будет еще красивше, екран разорвет
Решение от trdm_ ?
Отнюдь.
Добавить всего 4 строки и оно успешно обработает до 105 нулей. а если еще строку, то до 120.
14 июл 16, 13:55    [19409062]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
DECLARE @S VARCHAR(100)='114-0001001';
SELECT LEFT(@S,CHARINDEX('-',@S))+STUFF(S,1,PATINDEX('%[^0]%',S)-1,'') S
FROM (SELECT STUFF(@S,1,CHARINDEX('-',@S),''))T(S);
14 июл 16, 14:12    [19409141]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
LSV
o-o
если нулей может быть сотня,
будет еще красивше, екран разорвет
Решение от trdm_ ?
Отнюдь.
Добавить всего 4 строки и оно успешно обработает до 105 нулей. а если еще строку, то до 120.
Даже не так.

set @s = '114-0001001'

set @s = REPLACE(@s,'-00000000000000000000000000000000000000000000000000000000000000000000','-')
set @s = REPLACE(@s,'-0000000000000000000000000000000000','-')
set @s = REPLACE(@s,'-00000000000000000','-')
set @s = REPLACE(@s,'-00000000','-')
set @s = REPLACE(@s,'-0000','-')
set @s = REPLACE(@s,'-00','-')
set @s = REPLACE(@s,'-0','-')
Select @s

Захавает до 128 нулей. :)
14 июл 16, 14:29    [19409242]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
o-o
Guest
ок, поймал :)
действительно, для n = 14 Sn = 105.
но зато чтобы набрать 1000,
т.е. 1000 нулей ликвидировать, уже n = 45,
т.е. все-таки разорвет
14 июл 16, 14:31    [19409257]     Ответить | Цитировать Сообщить модератору
 Re: Удаление нулей из строки  [new]
o-o
Guest
LSV
set @s = REPLACE(@s,'-00000000000000000000000000000000000000000000000000000000000000000000','-')
set @s = REPLACE(@s,'-0000000000000000000000000000000000','-')
set @s = REPLACE(@s,'-00000000000000000','-')
set @s = REPLACE(@s,'-00000000','-')
set @s = REPLACE(@s,'-0000','-')
set @s = REPLACE(@s,'-00','-')
set @s = REPLACE(@s,'-0','-')
Select @s

ето уже картинка "указующий перст"
куда это он указывает?
по-моему, на дверь, я иду обедать. вам того же
14 июл 16, 14:34    [19409285]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить