我们有逗号分隔的字符串
"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将其转化为所需结果的最佳方法是什么?
答案 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个字符等,然后不需要分隔符