7 Stimmen

Fügen Sie Zeichen an mehreren Stellen in Zeichenfolge sql ein

Wie möchte ich die Buchungskontierung GL-Nummer umwandeln

99999999999999999

zu

999-99999-99-9999.999

in einer Abfrage an den MSSQL Server 2005

Ich brauche die Daten nicht zu aktualisieren, sondern nur die ZEICHENFOLGE in der Abfrage umzuwandeln.

Tabelle: GLM_MASTER__ACOUNT Feld: Konto

Danke.

14voto

etliens Punkte 1332

Noch eine Möglichkeit mit STUFF()

DECLARE @a varchar(64)
SET @a = '99999999999999999'
SELECT  STUFF(STUFF(STUFF(STUFF(@a, 4, 0, '-'), 10, 0, '-'), 13, 0, '-'), 18, 0, '.')

0 Stimmen

STUFF ist wirklich ein besseres Konzept, da Sie es zusammen mit jeder anderen Funktion verwenden können, ohne es zu wiederholen, z. B .: STUFF(REPLACE(Phone, ' ', ''), 5, 0, '-').

8voto

Tom H Punkte 45699

Sie müssen SUBSTRING verwenden:

SELECT
    SUBSTRING(account, 1, 3) + '-' +
    SUBSTRING(account, 4, 5) + '-' +
    SUBSTRING(account, 9, 2) + '-' +
    SUBSTRING(account, 11, 4) + '.' +
    SUBSTRING(account, 15, 3)

1voto

Daniel Brughera Punkte 1621

Ich habe nach etwas Ähnlichem gesucht und dies nützlich gefunden, also habe ich eine Funktion erstellt, um dynamische Masken zu erstellen

CREATE FUNCTION dbo.fn_MaskString (@Value NVARCHAR(MAX), @Mask NVARCHAR(MAX), @Char NVARCHAR(10))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Result NVARCHAR(MAX)
DECLARE @CharPos INT
DECLARE @Position INT
SET @Result = @Value
SET @CharPos = 1 
WHILE @CharPos <= LEN(@Char)
BEGIN
    SELECT @Position = CHARINDEX(SUBSTRING(@Char,@CharPos, 1), @Mask, 1)
    WHILE @Position > 0 AND @Position <= LEN(@Result)
    BEGIN
        SELECT @Result = STUFF(@Result, @Position, 0, SUBSTRING(@Char,@CharPos, 1))
        SELECT @Position = CHARINDEX(SUBSTRING(@Char,@CharPos, 1), @Mask, @Position+1)
    END
    SET @CharPos += 1
END

    RETURN @Result
END
GO

SELECT dbo.fn_MaskString('99999999999999999', 'XXX-XXXXX-XX-XXXX.XXX', '-.')
-- RESULT 999-99999-99-9999.999

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X