我该如何更改; A; B; C;到('A','B','C')?

时间:2019-08-09 13:44:04

标签: sql-server tsql ssms

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

我考虑过更换;带有逗号,但随后在前后仍然有逗号,并且还需要添加单引号。

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

我要; a; b; c;是'a','b','c'或至少是a,b,c,但我不知道该如何处理开始和结束分号

3 个答案:

答案 0 :(得分:1)

使用substring()replace()

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

请参见demo
结果:

'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

请参见demo

答案 1 :(得分:0)

您可以尝试:

SELECT REPLACE(LEFT(S_List,1),';','''')
 SELECT REPLACE(RIGHT(S_List,1),';','''')

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

答案 2 :(得分:0)

如果您的值没有空格,则可以使用trim()技巧:

select '''' + replace(ltrim(rtrim(replace(s_list, ',', ' '))), ',', ''',''') + ''''