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

Откуда: инфа100%
Сообщений: 2521
есть столбец в строке вида [000000], в другой строке он [000] в третьей [000]-[0000000]
и так далее может варьироваться.

задача в том чтобы заменить все нули находящиеся внутри только квадратных скобок на число 1.

думаю о REPLACE, но не пойму как...
спасибо!
7 июн 11, 17:37    [10778310]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
gar
Member

Откуда:
Сообщений: 7955
1d0
думаю о REPLACE, но не пойму как...

навскидку еще нужно
CHARINDEX SUBSTRING REPLICATE
7 июн 11, 17:50    [10778400]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
Glory
Member

Откуда:
Сообщений: 104751
1d0

думаю о REPLACE, но не пойму как...

Потому что тут подошли бы регулярные выражения, которых нет
А так придется искать открывающие/закрывающие символы, и генерить строку нужной длины
7 июн 11, 18:05    [10778515]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
1d0
Member

Откуда: инфа100%
Сообщений: 2521
Glory
1d0
думаю о REPLACE, но не пойму как...

Потому что тут подошли бы регулярные выражения, которых нет
А так придется искать открывающие/закрывающие символы, и генерить строку нужной длины


например открывающий символ "[" и закрывающий "]"

как это можно всё тогда представить?
7 июн 11, 18:11    [10778552]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
1d0, учебная задача?
PATINDEX в помощь.
7 июн 11, 18:22    [10778612]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
declare @s varchar(100) = '[000]-[0000000]'

;with num(n) as
(
 select number from master..spt_values where type = 'P'
),
p(s, e) as
(
 select
  charindex('[', @s, n),
  charindex(']', @s, n)
 from
  num
 where
  n between 1 and len(@s) and
  (charindex('[', @s, n) = n or charindex(']', @s, n) = n)
)
select
 @s = stuff(@s, s + 1, e - s - 1, replicate('1', e - s - 1))
from
 p
where
 s > 0 and s < e and
 substring(@s, s + 1, e - s - 1) = replicate('0', e - s - 1)

select @s
7 июн 11, 18:25    [10778633]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
1d0, т.к. есть подозрения на то что задача учебная, то полностью рабочий вариант не даю))).
Но пример держите:
DECLARE @tbl TABLE (a varchar(50))
INSERT INTO @tbl(a)
SELECT 'sdf[000]dfgdfg' UNION ALL SELECT '[0000]-[0]' UNION ALL SELECT '[00f00]-[012]'


SELECT  t.a, REPLACE(t.a, '['+REPLICATE('0',f.number)+']','['+REPLICATE('1',f.number)+']')
FROM    @tbl t
        JOIN ( SELECT   '%[[]' + REPLICATE('0', t.number) + ']%' f ,
                        t.number
               FROM     master..spt_values t
               WHERE    t.type = 'p'
                        AND t.number > 0
             ) f ON PATINDEX(f.f, t.a) <> 0
допилите уж сами.
7 июн 11, 18:27    [10778640]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
timda
Member

Откуда: Россия
Сообщений: 580
1d0,

кстати, по поводу ТС, ответ очевиден
Replace("0", ""),Replace("[]", "[1]")
8 июн 11, 00:16    [10779798]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
timda, если вас уж сильно зацепило это сообщение 10756384, то примите как данность. Это мое личное мнение, оно может не совпадать с вашим. В то же время вы не вынудите меня дойти до оскорблений. Культура они либо есть, либо ее нет.

ЗЫ: Replace("0", ""),Replace("[]", "[1]") - это не совсем верно, можете проверить самостоятельно.
8 июн 11, 00:21    [10779814]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
2timda.
Я думаю, надо начинать вести себя прилично, чтобы не схлопотать бан. Это предупреждение.

2All
Весь срач не по теме я вытер. Ведите себя прилично, в общем.
8 июн 11, 00:31    [10779849]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
timda
Member

Откуда: Россия
Сообщений: 580
Гавриленко Сергей Алексеевич,

Спасибо, я одобряю ваш поступок.
8 июн 11, 00:33    [10779861]     Ответить | Цитировать Сообщить модератору
 Re: замена?  [new]
timda
Member

Откуда: Россия
Сообщений: 580
Гавриленко Сергей Алексеевич,

Ну да, отдельно надо наверно извиниться, перед вами, администрацией и посетителями форума.
8 июн 11, 00:34    [10779866]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить