sql >> Databasteknik >  >> RDS >> Sqlserver

Radbryt text i SQL-server med funktionen

Funktion 1

Create FUNCTION [dbo].[fn_BraekTextInLines]
(
    -- Add the parameters for the function here
    @InString varchar(max), 
    @LineLength int
)
RETURNS nvarchar(max)
AS
BEGIN


if @LineLength <=0 or @LineLength> LEN(@InString)
return @InString

declare @tmp varchar(max)
declare @result varchar(max)
DECLARE @word varchar (max);
declare @addedInResult bit
DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT s FROM SplitMax(@InString,'');

OPEN c;

FETCH NEXT FROM c INTO @word;
--set @tmp [email protected]
WHILE @@FETCH_STATUS = 0
BEGIN


  if LEN(@tmp + ' ' + @word) < @LineLength
  begin
    set @tmp = @tmp + ' ' + @word   
    set @addedInResult = 0
  end
  else
  begin

    set @result =  isnull(@result, ' ') + CHAR(13) +  RTRIM(LTRIM( @tmp))
    set @tmp = @word
    set @addedInResult = 1

  end

    FETCH NEXT FROM c INTO @word;

    if @@FETCH_STATUS <> 0
    begin
     set @result =  isnull(@result, ' ') + CHAR(13) + RTRIM(LTRIM( @tmp))
     set @addedInResult = 1
    end
END

CLOSE c;
DEALLOCATE c;

if @addedInResult=0
begin
    set @result =  isnull(@result, ' ') + CHAR(13) +  RTRIM(LTRIM( @tmp))
end

return @result

END

Funktion 2

   Create FUNCTION [dbo].[fn_WrapString]
(
    -- Add the parameters for the function here
    @InString varchar(max), 
    @LineLength int
)
RETURNS nvarchar(max)
AS
BEGIN

declare @result varchar(max)
declare @tmp varchar(max)
DECLARE @Line varchar (max);

DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT s FROM SplitMax(@InString,CHAR(13));

OPEN c;

FETCH NEXT FROM c INTO @Line;

WHILE @@FETCH_STATUS = 0
BEGIN

  set @tmp = dbo.fn_BraekTextInLines(@Line,@LineLength)
  set @result = isnull(@result,' ') + @tmp

  FETCH NEXT FROM c INTO @Line;
END

CLOSE c;
DEALLOCATE c;

return Rtrim(Ltrim(@result))

END

Funktion 3

ALTER FUNCTION [dbo].[SplitMax](@String VARCHAR(max), @Delimiter CHAR(1))       
RETURNS @temptable TABLE (s VARCHAR(max))       
AS       
BEGIN       
DECLARE @idx INT       
DECLARE @slice VARCHAR(max)        
SELECT @idx = 1       
IF len(@String)<1 OR @String IS NULL  RETURN       
while @idx!= 0       
BEGIN       
SET @idx = charindex(@Delimiter,@String)       
IF @idx!=0       
SET @slice = LEFT(@String,@idx - 1)       
ELSE       
SET @slice = @String       
IF(len(@slice)>0)  
INSERT INTO @temptable(s) VALUES(@slice)       
SET @String = RIGHT(@String,len(@String) - @idx)       
IF len(@String) = 0 break       
END   
RETURN       
END

Anropar funktionen fn_WrapString för att radbryta texten

declare @name varchar(max)
set @name = 'Ine was King of Wessex from 688 to 726. He was'+ CHAR(13) +'unable to retain the territorial gains of his predecessor, Cædwalla, who had brought much of southern England under his'
print dbo.fn_WrapString(@name,60)

Utdata :

Ine was King of Wessex from 688 to 726. He was 
unable to retain the territorial gains of his predecessor,
Cædwalla, who had brought much of southern England under
his



  1. Hur man optimerar MySQL Views

  2. Highcharts multi-line grafer

  3. Spring Mvc Hibernate Encoding/Multi-line import sql

  4. MySQL datum och tid funktioner finns inte