Ich habe eine NVARCHAR(10)
Spalte in einer Tabelle. Es kann alle Arten von UNICODE-Strings speichern.SQL Server: Ersetzen Sie Zeichen, die anders als ein Zeichen in einer Zeichenfolge sind, die keine temporäre Tabelle verwenden
Ich möchte jedes Zeichen, das sich von '1' unterscheidet, durch '0' ersetzen.
Nehmen wir an, ich habe die Zeichenfolge 'C18 *'. Ich sollte '0100000100' bekommen.
Ich schaffte es mit einem Helfer-Tabelle zu tun, die Indizes von 1 bis zur Größe meiner Spalte (10) enthält, wie folgt aus:
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,'')
Es funktioniert, aber es kann in einem schöneren getan werden Weg? Dies scheint für ein einfaches Update hässlich zu sein und ignoriert die Tatsache, dass sich die Größe der Spalte im Laufe der Zeit ändern kann. Es muss auch auf SQL> = 2005 ausgeführt werden.
SQL Fiddle here
Dank!
Können Sie dies nur tun, mit einem Standard-proc oder können Sie ein .Net-Verfahren verwenden? Ist das etwas, das oft oder nur einmal ausgeführt werden muss, um Daten zu scrubben? –
@MauriceReeves Es muss nur einmal (einige korrupte Daten in einigen unserer Datenbanken) gegen Dutzende von großen Tabellen (10K + Zeilen) ausgeführt werden. Eine einfache Konsolen-App hätte das gelöst, aber ich habe gefragt, ob die gleiche Situation erneut auftritt. Ich mag diese temporäre Tabelle nicht. – darkdante
Eine Zahlentabelle ist sehr nützlich. Viele haben es als festen Tisch. –