Temos Cenário em que precisamos modificar a string de entrada ao buscar dados do SQL Server.
"TEST RATE CODE DESC TEST RATE CODE DESCTST TEST" e C é o 47º caractere em um "DESCTST" e, em seguida, pressione o delimitador no início de uma palavra. como "\DESCTST"
Por exemplo:
Atual => TEST RATE CODE DESC TEST RATE CODE DESCTST TEST\
Obrigatório => CÓDIGO DA TAXA DE TESTE DESC CÓDIGO DA TAXA DE TESTE DESCTST \TEST
Criamos uma função SQL para conseguir isso e tudo funcionando bem, exceto a operação de retrocesso, conforme mencionado no exemplo.
Aqui está minha função SQL:
ALTER FUNCTION [dbo].[DescFormatter_New]
(
@InputString nvarchar(max),
@MaxLength int=0,
@CharPerLine int=0,
@NoOfLines int=0
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @ResultText nvarchar(max)
DECLARE @I INT
DECLARE @COUNT INT
IF(LEN(@InputString)<@CharPerLine)
BEGIN
SET @ResultText=@InputString
END
ELSE
BEGIN
set @InputString=LEFT(@InputString,@MaxLength)
SET @I = LEN(@InputString)/@CharPerLine
if((@I*@CharPerLine)<LEN(@InputString))
BEGIN
SET @I=@I+1
END
SET @COUNT =1
SET @ResultText= LEFT((@InputString),@CharPerLine)
if(@I>@NoOfLines)
Begin
set @I=@NoOfLines
End
WHILE(@I>1 AND @I<=@NoOfLines)
BEGIN
SET @ResultText=@ResultText+'\'+SUBSTRING(@InputString,(@COUNT*@CharPerLine)+1,@CharPerLine)
SET @COUNT=@COUNT+1
SET @I=@I-1
END
END
RETURN @ResultText
END
Chamamos esta função como aqui:
[dbo].[DescFormatter_New](LText,94,47,2) AS [Short Description]
Observe que precisaremos de vários delimitadores de linha para a string que contém mais de 100 ou 200 caracteres.
aqui estão alguns exemplos:
1) String de entrada = Deluxe e espaçoso 1 cama king size NS no quarto Whirlpool Computador Wet Bar Frigorífico Mini-bar Secretária Cofre WIFI Decoração acolhedora
Saída esperada = Deluxe e espaçoso 1 cama king size NS no quarto \ Whirlpool Computador Wet Bar Geladeira Mini \ Bar Mesa Cofre WIFI Decoração aconchegante
2) I nput String = Espaçoso 1 cama queen size para não fumantes com TV de tela plana com cabo wifi cafeteira mini frig microondas secador de cabelo ferro com teste de placa de teste
Saída esperada = Espaçosa 1 Cama Queen Não Fumantes com TV de tela plana com cabo wifi cafeteira mini \ frig microondas secador de cabelo ferro com placa de teste \ teste
Na string de saída esperada acima, o primeiro delimitador vem após 47 caracteres, ou seja, entre Whirl\pool (exibido como \Whirlpool) e, em seguida, o loop começará da contagem 1 novamente após Whirl no Whirlpool, então o segundo delimitador deve vir como aqui Des\ k (Exibido como \Desk).
Como eles fazem isso
Primeiro passo, selecione a primeira substring de N caracteres no modo reverso.
Segundo, encontre a primeira posição do espaço na string invertida, que é o início da palavra selecionada:
Em seguida, inverta novamente, pegue a parte esquerda da string e adicione um separador '/':
Último passo calculando a próxima posição inicial, de acordo com o início da palavra selecionada:
Toda a função:
Como usá-lo:
Este é o resultado:
dbfiddle aqui
Aqui está outra opção
Devoluções