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