Jak usunąć dowolny ciąg znaków

Jak usunąć dowolny ciąg znaków
B2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Witam,

Jak usunąć dowolny ciąg znaków umieszczony pomiędzy dwoma znakami ##.
Czyli jeżeli mam np. #cokolwiek# to cały tekst 'cokolwiek' razem ze znakami # jest usuwany.

Kawałek kodu, który teraz przerzuca jeden do jednego a mi zależy aby do 'uwagi' zostało przerzucone wszystko z '@uwagi' oprócz tekstu #cokolwiek#.

Kopiuj
       UPDATE doksprzed
         SET uwagi = @uwagi
       WHERE doksprzed_id = @doksprzed_id 
ZS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

Napisz coś w takim stylu:

Kopiuj
UPDATE doksprzed
         SET uwagi = REPLACE(@uwagi, REGEXP_SUBSTR(@uwagi, '#[a-zA-Z0-9]*#'), '')
       WHERE doksprzed_id = @doksprzed_id  
B2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Tylko, że ja ma MS SQL a ty podałeś funkcję z Oracla.

IC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

spróbuj połączeniem funkcji REPLACE, SUBSTR i CHARINDEX

KiK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
0

pytanie pomocnicze: czy masz pewność, że we wszystkich rekordach występuje ciąg znaków '#ciąg_znaków#'
Z uwagi na to że nie udało mi się znaleźć szybkiego sposobu proponuję następującą kombinację:

1.Szukasz pierwszego wystąpienia znaku '#' funkcja CHARINDEX()
2.Ucinasz pierwszy ciąg znaków od początku stringa do znaku '#' funkcją LEFT()
3.Później ucinasz substringa od pierwszego wystąpienia znaku '#' do końca, funkcja SUBSTRING()
4. szukasz drugiego wystąpienia znaku '#'
5.wyciągasz drugiego substringa od drugiego wystąpiania znaku '#' od końca i łączysz obie części z tego punktu i punktu 2

trochę kombinacji ale działa :)

B2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Nie w każdym rekordzie jest ten ciąg #ciąg_znaków#

Mam takie coś ale jak brak #ciąg_znaków# to usuwa wszystko

Kopiuj
 UPDATE doksprzed
              SET uwagi =replace(left(@uwagi,(charindex('#',@uwagi))),'#','')
           --SET uwagi = @uwagi
            WHERE doksprzed_id = @doksprzed_id

Dodam jeszcze, że #ciąg_znaków# jest zawsze na końcu.

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0
Kopiuj
declare @x varchar(100)
select @x = 'jakis ciąg znakow#cos pomiedzy# dalej'

select 
@x
,substring(@x,charindex('#',@x),charindex('#',@x,charindex('#',@x)+1)-charindex('#',@x)+1)
,replace(@x,substring(@x,charindex('#',@x),charindex('#',@x,charindex('#',@x)+1)-charindex('#',@x)+1),'')

wynik

Kopiuj
jakis ciąg znakow#cos pomiedzy# dalej |   #cos pomiedzy# |  jakis ciąg znakow dalej

Podstaw z @x swoja kolumnę, to zadziala tylko dla wartości w których masz dx #

B2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Dzięki za wszystkie podpowiedzi i pomoc.
Temat do zamknięcia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.