вставьте символ в строку в нескольких местах sql - PullRequest
7 голосов
/ 25 июня 2010

как бы я хотел конвертировать бухгалтерский номер GL

99999999999999999

до

999-99999-99-9999.999

в запросе к MSSQL серверу 2005

Мне не нужно обновлять данные, просто конвертируйте STRING по запросу.

Таблица: GLM_MASTER__ACOUNT Поле: Счет

спасибо.

Ответы [ 3 ]

13 голосов
/ 25 июня 2010

Еще один способ использования STUFF ()

DECLARE @a varchar(64)
SET @a = '99999999999999999'
SELECT  STUFF(STUFF(STUFF(STUFF(@a, 4, 0, '-'), 10, 0, '-'), 13, 0, '-'), 18, 0, '.')
8 голосов
/ 25 июня 2010

Вам нужно использовать SUBSTRING:

SELECT
    SUBSTRING(account, 1, 3) + '-' +
    SUBSTRING(account, 4, 5) + '-' +
    SUBSTRING(account, 9, 2) + '-' +
    SUBSTRING(account, 11, 4) + '.' +
    SUBSTRING(account, 15, 3)
1 голос
/ 02 апреля 2019

Я искал что-то подобное и нашел это полезным, поэтому, чтобы что-то вернуть сообществу, я сделал функцию для создания динамических масок

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...