【问题标题】:How to insert a line break after every 28 characters without breaking words, IN T-SQL如何在每 28 个字符后插入换行符而不中断单词,IN T-SQL
【发布时间】:2022-01-16 09:14:08
【问题描述】:

我需要帮助在每 28 个字符后插入一个换行符,但如果它在一个单词的中间,它应该转到下一个空格并进行换行,我的代码现在是一个填充函数,我可以连接多个记录

STUFF((
    SELECT 
    new_maincatgoriesname
    FROM new_subcatagories
    WHERE new_subcatagories.new_subcatagoriesid  in (select [new_subactivitys] from new_activityassigment where new_assigndomain = new_sessionactivitydefinitionid)
    FOR XML PATH (''))
  ,1,1,'')

【问题讨论】:

  • 所以您希望 lline 最多为 28 个字符或 28 个字符 + 下一行之前单词的剩余字符?一些示例数据和预期结果以及您的 SQL Server 版本会有所帮助。
  • 我个人会说 SQL Server 因此不太可能是执行此操作的正确工具。虽然可以,但它可能需要迭代,这不是 SQL 擅长的,而且 T-SQL 的字符串操作工具充其量只是初级的。在应用程序中执行此操作可能会更好。
  • 您的研究是否包括搜索[tsql] split string maximum length?这些答案没有提供您需要什么?
  • 如果这是您系统中经常运行的常规任务,您可能希望投资创建一个custom CLR aggregate

标签: sql sql-server tsql


【解决方案1】:

对于这种文本操作,您应该使用程序化方法,而不是基于集合的方法。 TSQL 在这类事情上并不是最好的,但它可以做到。 EG

create or alter function SplitLines(@val nvarchar(max), @lineLen int)
returns nvarchar(max)
as
begin
/*
  select dbo.splitLines('The quick brown fox jumped over the lazy dog.', 15)
*/
  declare @i int = 0
  declare @curLen int = 0;
  declare @rv nvarchar(max) = '';
  

  while @i <= len(@val)
  begin
    
    declare @c nvarchar(1) = substring(@val,@i,1)
    set @curlen = @curlen + 1

    set @rv = @rv + @c
    if @curlen >= @lineLen
    begin
      if @c = N' '
      begin
        set @rv = @rv + char(10)
        set @curlen = 0
      end
    end
    
    set @i = @i + 1
  end
  return @rv
end

测试代码输出

The quick brown 
fox jumped over 
the lazy dog.

(1 row affected)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2019-04-09
    • 2022-01-15
    相关资源
    最近更新 更多