REPLACE FUNCTION

di Dengo il
24 risposte

24 Risposte - Pagina 2

  • 11/06/2023 - Dengo ha scritto:


    No devo farlo con sql server perche lo uso in un trigger, nn posso scrivere il codice sul programma xche e' di terze parti.

    Il signor terze parti non protegge le tabelle??? 

    Speriamo non ci siano le cartelle cliniche degli italiani…

    Complimenti!

    Una volta ho dovuto criptare i dati anche se protetti da password…

  • Si certo, rispondevo  a sihsandrea

  • come dovrebbe essere scritta la stringa

    Non riesco con charindex a trovare gli spazzi.

    sapete darmi un consiglio

  • Ciao,

    ho fatto alcune prove … mi fai il test con questo:

    SELECT STUFF(REPLACE(REPLACE(TUASTRINGA, '(', ' '), ')', ' '), PATINDEX('%[0-9][a-zA-Z]%', REPLACE(REPLACE(TUASTRINGA, '(', ' '), ')', ' ')), 0, ' ')

    Poi devi inserire lo spazio dopo la parentesi chiusa

  • no, non mi funziona se ho messo bene gli spazi

  • 12/06/2023 - Dengo ha scritto:


    no, non mi funziona se ho messo bene gli spazi

    verifica bene perchè può essere una strada da percorrere… 
    ma vedo ancor più valida l'idea di oregon 

  • Si , sto facendo diverse prove, vediamo coa riesco a tirare fuori.

    grazie èer adesso.

  • Prova con

    DECLARE @str as varchar(max), @i as int, @j as int
    SET @str = N'1a1b1a1c20[2a2b]1a1b3[1c1d]3[1a1b]3[1a1b]1a1d'
    SET @i=CHARINDEX('[',@str,1)
    
    WHILE @i > 0
    BEGIN
    	SET @j = 1
    	WHILE ISNUMERIC(SUBSTRING(@str,@i-@j,1)) = 1
    		SET @j += 1
    		
    	SET @str = LEFT(@str,@i-@j) + ' ' + SUBSTRING(@str,@i-@j+1,@j-1) + '(' + SUBSTRING(@str,@i+1,LEN(@str))
    	SET @i = CHARINDEX('[',@str,@i)
    END
    SELECT REPLACE(REPLACE(@str,']',') '),'  ',' ')
    

    L'output è: 1a1b1a1c 20(2a2b) 1a1b 3(1c1d) 3(1a1b) 3(1a1b) 1a1d

    Se passa i tests, lo trasformi in una UDF.

    NOTA: non capisco perché, prima dei due blocchi che iniziano con 3, mi mette il doppio spazio… Ho rappezzato col doppio REPLACE, ma non mi piace molto.

    EDIT: Mi viene però il dubbio che l'output atteso possa essere; 1a1b 1a1c … Quindi a blocchi di 4 più, opzionalmente, il “coefficiente” se così lo vogliamo chiamare.

  • Ciao Sgrubak, funziona benissimo grazie, ora devo sistemare un po di cose io.

    grazie 1000

  • SET @WeftPattern = N'1B1A1B2[1C1D]2[1A1B]1A1E30[1A1D]1A1E2[1A1B]2[1C1D]2[1A1B]2[1C1D]2[1A1B]2[1C1D]2[1A1B]2[1C1D]2[1A1B]2[1C1D]2[1A1B]2[1C1D]1A'

    DECLARE @str nvarchar(max), @i int, @j int, @strfind nvarchar (max)
    SET @str = @WeftPattern
    SET @i=CHARINDEX('[',@str,1)

    WHILE @i > 0
    BEGIN
    SET @j = 1
    WHILE ISNUMERIC(SUBSTRING(@str,@i-@j,1)) = 1
     SET @j += 1
     
    SET @str = LEFT(@str,@i-@j) + ' '  + SUBSTRING(@str,@i-@j+1,@j-1) + '(' + SUBSTRING(@str,@i+1,LEN(@str)) 
    SET @i = CHARINDEX('[',@str,@i)
    END
    set @strfind =  REPLACE(REPLACE(@str,']',') '),'  ',' ')

    select replace(@strfind, ' ', char (13))

    risultato

    1B1A1B
    2(1C1D)
    2(1A1B)
    1A1E
    30(1A1D)
    1A1E
    2(1A1B)
    2(1C1D)
    2(1A1B)
    2(1C1D)
    2(1A1B)
    2(1C1D)
    2(1A1B)
    2(1C1D)
    2(1A1B)
    2(1C1D)
    2(1A1B)
    2(1C1D)
    1A

    adesso e' perfetta, grazie dell' aiuto

Devi accedere o registrarti per scrivere nel forum
24 risposte