如何用SQL将含多语言信息的字符串拆分至不同列?
拆分混合语言评论至独立列的SQL实现
针对你提供的测试数据,我们可以通过字符串拆分、语言分类、聚合拼接三个步骤,将混合的越南语和英语评论分别提取到独立列中,以下是具体实现方案:
核心实现代码
-- 初始化测试数据(复用你的创建语句) IF OBJECT_ID('tempdb..#TblName') IS NOT NULL DROP TABLE #TblName CREATE TABLE #TblName ( JobNum varchar(10) ,CommentText nvarchar(max) ) INSERT INTO #TblName VALUES ('F001234','Vietnamese point-1; Vietnamese point-2; Vietnamese point-3; Vietnamese point-4; Vietnamese point-5; English point-1; English point-2; English point-3; English point-4; English point-5;') INSERT INTO #TblName VALUES ('F005678','Vietnamese point-1; English point-2; Vietnamese point-3; English point-1; Vietnamese point-2; English point-3; English point-4') -- 拆分并分类评论的核心查询 SELECT JobNum, -- 聚合越南语评论 STRING_AGG(CASE WHEN TRIM(value) LIKE 'Vietnamese%' THEN TRIM(value) END, '; ') AS VietnameseComments, -- 聚合英语评论 STRING_AGG(CASE WHEN TRIM(value) LIKE 'English%' THEN TRIM(value) END, '; ') AS EnglishComments FROM #TblName -- 将每条评论按分号拆分为单独条目 CROSS APPLY STRING_SPLIT(CommentText, ';') -- 过滤拆分后产生的空内容 WHERE TRIM(value) <> '' GROUP BY JobNum
代码说明
- 字符串拆分:使用
STRING_SPLIT函数(SQL Server 2016及以上版本支持)将CommentText按分号;拆分为多行,每条行对应一个独立的评论条目。 - 过滤空值:通过
TRIM(value) <> ''排除拆分后产生的空条目(比如原字符串末尾分号导致的空内容)。 - 语言分类:利用
CASE语句结合LIKE匹配前缀,识别越南语(以Vietnamese开头)和英语(以English开头)条目。 - 聚合拼接:使用
STRING_AGG函数将同一JobNum下的同语言条目重新拼接为完整的字符串,还原为列形式。
适配真实语言场景(无前缀)
如果你的实际数据没有Vietnamese/English前缀,而是真实的越南语和英语文本,可以通过Unicode字符范围判断语言:
越南语字符的Unicode范围为U+00C0-U+017F、U+1EA0-U+1EFF,修改后的核心查询如下:
SELECT JobNum, STRING_AGG(CASE WHEN PATINDEX('%[À-ỹ]%', TRIM(value)) > 0 THEN TRIM(value) END, '; ') AS VietnameseComments, STRING_AGG(CASE WHEN PATINDEX('%[À-ỹ]%', TRIM(value)) = 0 THEN TRIM(value) END, '; ') AS EnglishComments FROM #TblName CROSS APPLY STRING_SPLIT(CommentText, ';') WHERE TRIM(value) <> '' GROUP BY JobNum
内容的提问来源于stack exchange,提问作者TKN
相关产品推荐
相关产品推荐

