REPLACE FUNCTION

di il
24 risposte

24 Risposte - Pagina 2

  • Re: REPLACE FUNCTION

    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…

  • Re: REPLACE FUNCTION

    Si certo, rispondevo  a sihsandrea

  • Re: REPLACE FUNCTION

    come dovrebbe essere scritta la stringa

    Non riesco con charindex a trovare gli spazzi.

    sapete darmi un consiglio

  • Re: REPLACE FUNCTION

    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

  • Re: REPLACE FUNCTION

    no, non mi funziona se ho messo bene gli spazi

  • Re: REPLACE FUNCTION

    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 

  • Re: REPLACE FUNCTION

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

    grazie èer adesso.

  • Re: REPLACE FUNCTION

    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.

  • Re: REPLACE FUNCTION

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

    grazie 1000

  • Re: REPLACE FUNCTION

    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