0
我已经创建了一种方法来在MS SQL中取出一个字符串并将其分解到一个空格处以避免分词。如果每行的长度等于或大于17个字符,则会将字符串拆分为3个单独的字符串作为新行。在MS SQL中拆分单词
DECLARE @Prod_Desc varchar(50) = '12345 BAG 15 LB NR SML BTS CHICKEN MEAL AND RICE'
DECLARE @Prod_Desc_Line2 varchar(50);
DECLARE @Prod_Desc_Line3 varchar(50);
-- Generate second line and center
IF len(@Prod_Desc) >= 17
BEGIN
SELECT @Prod_Desc_Line2 = SUBSTRING(@Prod_Desc, 18 - CHARINDEX(' ', REVERSE(SUBSTRING(@Prod_Desc, 1, 17)), 1), len(@Prod_Desc) + CHARINDEX(' ', REVERSE(SUBSTRING(@Prod_Desc, 1, 17)), 1) - 17);
SELECT @Prod_Desc = SUBSTRING(@Prod_Desc, 1, 17 - CHARINDEX(' ', REVERSE(SUBSTRING(@Prod_Desc, 1, 17)), 1));
END;
-- Generate third line and center
IF len(@Prod_Desc_Line2) >= 17
BEGIN
SELECT @Prod_Desc_Line3 = SUBSTRING(@Prod_Desc_Line2, 18 - CHARINDEX(' ', REVERSE(SUBSTRING(@Prod_Desc_Line2, 1, 17)), 1), len(@Prod_Desc_Line2) + CHARINDEX(' ', REVERSE(SUBSTRING(@Prod_Desc_Line2, 1, 17)), 1) - 17);
SELECT @Prod_Desc_Line2 = SUBSTRING(@Prod_Desc_Line2, 1, 17 - CHARINDEX(' ', REVERSE(SUBSTRING(@Prod_Desc_Line2, 1, 17)), 1));
END;
PRINT(@Prod_Desc);
PRINT(@Prod_Desc_Line2);
PRINT(@Prod_Desc_Line3);
输出:
12345 BAG 15 LB
NR SML BTS
CHICKEN MEAL AND RICE
它的工作原理我怎么想,但我认为它看起来马虎。我想知道是否有更好的方法来做这个字符串的划分,或者如果有一个函数存在这样做?
为了便于说明,如果一个字符串大于17个字符,它会在限制命中之前找到最后一个空格,将其从原始字符串中截断,并将其添加到下一行的下一个字符串中。
这将能更好地贴在代码审查。 https://codereview.stackexchange.com/ –
还有很多其他的方法来做到这一点 - 这个问题是广泛的方式stackoverflow – Hogan
当最后一行是7500个字符会发生什么?你想要它超长?另外,你是否试图将其应用于一组数据?如果是这样,那么我猜你有一个基于你当前逻辑的循环。这是真的? – scsimon