如何将逗号分隔的字符串解析为单独的行,但忽略某些值的逗号

时间:2017-01-21 02:34:07

标签: sql-server

我们有逗号分隔的字符串

"col1=xyz,col2=mno,col3=ABC,ZZZ,col4=complete"

因此,所需的结果必须是:

col1 xyz
col2 mno
col3 ABC,ZZZ
col4 complete

当我尝试解析时,会发生什么(col4因为有逗号而被拆分)

col1 xyz
col2 mno
**col3 ABC
col4 ZZZ**
col4 complete

使用SQL将其转化为所需结果的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

{'one': 1, 'two': 2}

<强>返回

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

settings = QtCore.QSettings('apps', 'settings')

data = {'one': 1, 'two': 2}

settings.setValue('data', data)

data = settings.value('data').toPyObject()
print data

需要的UDF

Declare @YourTable table (ID int,SomeList varchar(max)) 
Insert Into @YourTable values
(1,'col1=xyz,col2=mno,col3=ABC,ZZZ,col4=complete'),
(2,'emp_id="123",emp_status="New Hire",emp_name="Smith, John A"')

;with cte as (
      Select A.ID,B.*
      From  @YourTable A
      Cross Apply [dbo].[udf-Str-Parse](Replace(A.SomeList,' ','|'),',') B
)
Select A.ID
      ,Col_Name = left(A.RetVal,charindex('=',A.RetVal)-1)
      ,Value    = replace(substring(replace(A.RetVal + case when charIndex('=',B.RetVal)>0 then '' else ','+B.RetVal end,'|',' '),charindex('=',A.RetVal)+1,len(B.RetVal)+len(A.RetVal)),'"','')
 From  cte A
 Left  Join cte B on A.ID=B.ID and A.RetSeq=B.RetSeq-1 
 Where B.RetVal is not null and charIndex('=',A.RetVal)>0
 Order By ID,A.RetSeq

答案 1 :(得分:0)

简短的回答是:你做不到。 答案很长:你可以,如果你1)选择一个不会出现在你的字符串中的不同分隔符 - 分号或美元符号怎么样?或者2)定义一个转义字符,意思是“此后的字符应该以不同的方式解析”,但我不确定在你的上下文中是否可行,或者3)停止使用CSV并使用固定宽度字段,例如:field1总是10个字符等,然后不需要分隔符