заменить последний ноль на единицу

Mitresky
Дата: 03.12.2012 17:56:51
Есть число в бинарной форме, как можно заменить последний ноль на единицу.
например, 1011101 -> 1011111
ORA__SQL
Дата: 03.12.2012 18:03:37
Mitresky
Есть число в бинарной форме, как можно заменить последний ноль на единицу.
например, 1011101 -> 1011111
instr(reverse('1011101'),'0',1,1)
Дальше сам
orawish
Дата: 03.12.2012 18:04:04
Mitresky
Есть число в бинарной форме, как можно заменить последний ноль на единицу.
например, 1011101 -> 1011111


select regexp_replace(1011101,'0(1)+$','1\1') from dual;
orawish
Дата: 03.12.2012 18:05:11
orawish
Mitresky
Есть число в бинарной форме, как можно заменить последний ноль на единицу.
например, 1011101 -> 1011111


select regexp_replace(1011101,'0(1)*$','1\1') from dual;
dbms_photoshop
Дата: 03.12.2012 18:12:51
ORA__SQL
Mitresky
Есть число в бинарной форме, как можно заменить последний ноль на единицу.
например, 1011101 -> 1011111
instr(reverse('1011101'),'0',1,1)
Дальше сам
Лучше третий параметр -1, чем недокументированные функции.
-2-
Дата: 03.12.2012 18:19:07
Mitresky
Есть число в бинарной форме
а в терминах sql это первая или вторая нормальная форма?
reg_reg
Дата: 03.12.2012 18:26:50
orawish,

А есть ли простой способ получить регулярусом не последний ноль, а, например, третий с конца.
orawish
Дата: 03.12.2012 18:33:45
reg_reg
orawish,

А есть ли простой способ получить регулярусом не последний ноль, а, например, третий с конца.

аналогично. только нужно ли?
with t as (select       '0000000000000000000' s
                 ,instr('0000000000000000000',0,-1,3) i
             from dual
) select s, substr(s,1,i-1)||1||substr(s,i+1) from t;
reg_reg
Дата: 03.12.2012 18:53:19
orawish,

Спасибо. Интересовала именно возможность регулярусом отсчитывать вхождения с конца.
orawish
Дата: 03.12.2012 19:01:32
reg_reg
orawish,

Спасибо. Интересовала именно возможность регулярусом отсчитывать вхождения с конца.

если очень хочется, то запросто
with t as (select       '001100000000000000011' s
                 ,instr('001100000000000000011',0,-1,3) i
             from dual
) select s, substr(s,1,i-1)||1||substr(s,i+1) 
        ,regexp_replace(s,'0(((1)*0){3})(1*)$','1\1\4') r3
        ,regexp_replace(s,'0(((1)*0){5})(1*)$','1\1\4') r5
    from t;