Ho una colonna NVARCHAR(10)
in una tabella. Può memorizzare qualsiasi tipo di stringhe UNICODE.SQL Server: sostituisce caratteri diversi da un carattere in una stringa senza alcuna tabella temporanea
Desidero sostituire ogni carattere diverso da "1" con "0".
Diciamo che ho la stringa 'C18 *'. Dovrei prendere "0100000100".
sono riuscito a farlo utilizzando una tabella di supporto che contiene gli indici da 1 alla dimensione della mia colonna (10), in questo modo:
CREATE TABLE HELP(Idx INT)
INSERT INTO HELP
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
DECLARE @myStr VARCHAR(10)
SET @myStr = 'C18*'
SELECT STUFF((SELECT '' + CASE(B.Ch) WHEN '1' THEN '1' ELSE '0' END FROM (
SELECT SUBSTRING(A.Val,H.Idx,1) AS Ch
FROM
(SELECT @myStr AS Val) A
CROSS JOIN HELP H
)B FOR XML PATH('')),1,0,'')
Funziona, ma può essere fatto in un posto più bello modo? Questo sembra brutto per un semplice aggiornamento, ignorando il fatto che le dimensioni della colonna possono cambiare nel tempo. Inoltre deve essere eseguito su SQL> = 2005.
SQL Fiddlehere
Grazie!
si può fare solo con un proc di serie oppure puoi usare una procedura .Net? È qualcosa che deve essere eseguito molte volte o solo una volta per cancellare i dati? –
@MauriceReeves Deve essere eseguito una sola volta (alcuni dati corrotti in un paio dei nostri database) contro dozzine di grandi tabelle (10K + righe). Una semplice console di console avrebbe risolto questo problema, ma ho chiesto nel caso in cui la stessa situazione si ripetesse + Non mi piace quella tabella temporanea. – darkdante
Una tabella di numeri è molto utile. Molti lo hanno come tavolo permanente. –