замена?

1d0
Дата: 07.06.2011 17:37:24
есть столбец в строке вида [000000], в другой строке он [000] в третьей [000]-[0000000]
и так далее может варьироваться.

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

думаю о REPLACE, но не пойму как...
спасибо!
gar
Дата: 07.06.2011 17:50:21
1d0
думаю о REPLACE, но не пойму как...

навскидку еще нужно
CHARINDEX SUBSTRING REPLICATE
Glory
Дата: 07.06.2011 18:05:19
1d0

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

Потому что тут подошли бы регулярные выражения, которых нет
А так придется искать открывающие/закрывающие символы, и генерить строку нужной длины
1d0
Дата: 07.06.2011 18:11:39
Glory
1d0
думаю о REPLACE, но не пойму как...

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


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

как это можно всё тогда представить?
kDnZP
Дата: 07.06.2011 18:22:17
1d0, учебная задача?
PATINDEX в помощь.
invm
Дата: 07.06.2011 18:25:29
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
kDnZP
Дата: 07.06.2011 18:27:28
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
допилите уж сами.
timda
Дата: 08.06.2011 00:16:28
1d0,

кстати, по поводу ТС, ответ очевиден
Replace("0", ""),Replace("[]", "[1]")
kDnZP
Дата: 08.06.2011 00:21:08
timda, если вас уж сильно зацепило это сообщение 10756384, то примите как данность. Это мое личное мнение, оно может не совпадать с вашим. В то же время вы не вынудите меня дойти до оскорблений. Культура они либо есть, либо ее нет.

ЗЫ: Replace("0", ""),Replace("[]", "[1]") - это не совсем верно, можете проверить самостоятельно.
Гавриленко Сергей Алексеевич
Дата: 08.06.2011 00:31:01
2timda.
Я думаю, надо начинать вести себя прилично, чтобы не схлопотать бан. Это предупреждение.

2All
Весь срач не по теме я вытер. Ведите себя прилично, в общем.