我们有一个场景,我们需要在从 SQL Server 获取数据时修改输入字符串。
“TEST RATE CODE DESC TEST RATE CODE DESCTST TEST”和 C 是“DESCTST”中的第 47 个字符,然后在单词的开头推定界符。像“\DESCTST”
例如:
当前 => 测试速率代码 DESC 测试速率代码 DESCTST 测试\
必需 => 测试速率代码 DESC 测试速率代码 DESCTST \TEST
我们已经创建了一个 SQL 函数来实现这一点,除了示例中提到的向后操作之外,一切都运行良好。
这是我的 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
我们在这里调用这个函数:
[dbo].[DescFormatter_New](LText,94,47,2) AS [Short Description]
请注意,对于包含超过 100 或 200 个字符的字符串,我们将需要多个行分隔符。
这里有几个例子:
1) 输入字符串= 豪华宽敞的 1 张特大床 NS 室内漩涡浴缸电脑吧台冰箱迷你吧台保险箱 WIFI 温馨装饰
预期输出= 豪华宽敞的房间内配备 1 张特大床 NS \漩涡浴缸电脑吧台冰箱迷你 \吧台保险箱 WIFI 温馨装饰
2) I nput String = 宽敞的 1 张大床,无烟房,配备纯平电视和有线 wifi 咖啡机迷你冰箱微波炉吹风机熨斗带板测试测试
预期输出= 宽敞的 1 张大床,无烟房,配备纯平电视和有线 wifi 咖啡机迷你 \frig 微波炉吹风机熨斗,带板测试\测试
在上面的预期输出字符串中,第一个分隔符出现在 47 个字符之后,即在Whirl\pool(显示为 \Whirlpool)之间,然后循环将在 Whirl in the Whirlpool 之后再次从计数 1 开始,因此第二个分隔符应该像这里Des\ k(显示为 \Desk)。
他们是怎么做到的呢
第一步,反向选择N个字符的第一个子串。
第二个,找到反转字符串中的第一个空格位置,即所选单词的开头:
然后再次反转它,得到字符串的左边部分并添加一个分隔符'/':
最后一步根据所选单词的开头计算下一个初始位置:
整个功能:
如何使用它:
这是结果:
dbfiddle在这里
这是另一种选择
退货