首页 > 解决方案 > 我如何改变;A;B;C; 到('A','B','C')?

问题描述

我需要将用分号分隔的值列表(包括前面)转换为带有引号和逗号的常规值列表。字段中可能只有一个值,也可能有多个值。

我想过更换 ; 有逗号,但是后面还是有逗号,还需要加单引号。

REPLACE(S_List, ';', ',')

我想要;a;b;c; 成为 'a','b','c' 或至少 a,b,c 但我不知道如何处理开头和结尾的分号

标签: sql-servertsqlssms

解决方案


substring()replace():_

declare @slist varchar(100) = ';a;b;c;'
select substring(replace(@slist, ';', ''','''), 3, len(replace(@slist, ';', ''',''')) - 4) 

请参阅演示
结果:

'a','b','c'

编辑.
在你的表中像这样使用它:

select 
  case when s_list like '%;%;%' then
    substring(replace(s_list, ';', ''','''), 3, len(replace(s_list, ';', ''',''')) - 4)
    else s_list
  end  
from tablename

请参阅演示


推荐阅读