Es scheint, dass sich jeder immer wieder auf eine einzelne REPLACE-Funktion bezieht. Oder sogar viele Aufrufe einer REPLACE-Funktion. Wenn Sie jedoch eine dynamische Ausgabe mit einer unbekannten Anzahl von Leerzeichen haben, funktioniert dies nicht. Jeder, der sich regelmäßig mit diesem Problem befasst, weiß, dass REPLACE nur ein einzelnes Leerzeichen entfernt, NICHT ALLE, wie es sollte. Und LTRIM und RTRIM scheinen das gleiche Problem zu haben. Überlassen Sie es Microsoft. Hier ist eine Beispielausgabe, die eine WHILE-Schleife verwendet, um ALLE CHAR (32) -Werte (Leerzeichen) zu entfernen.
DECLARE @INPUT_VAL VARCHAR(8000)
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @INPUT_VAL = ' C A '
SET @OUTPUT_VAL = @INPUT_VAL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
PRINT 'START:' + @INPUT_VAL + ':END'
PRINT 'START:' + @OUTPUT_VAL + ':END'
Hier ist die Ausgabe des obigen Codes:
START: C A :END
START:CA:END
Um noch einen Schritt weiter zu gehen und es in einer UPDATE- oder SELECT-Anweisung zu verwenden, ändern Sie es in ein udf.
CREATE FUNCTION udf_RemoveSpaces (@INPUT_VAL VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @OUTPUT_VAL = @INPUT_VAL
-- ITTERATE THROUGH STRING TO LOOK FOR THE ASCII VALUE OF SPACE (CHAR(32)) REPLACE IT WITH BLANK, NOT NULL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
RETURN @OUTPUT_VAL
END
Verwenden Sie dann die Funktion in einer SELECT- oder INSERT-Anweisung:
UPDATE A
SET STATUS_REASON_CODE = WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE
INSERT INTO SOMETABLE
(STATUS_REASON_CODE)
SELECT WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE