将SQL列解析为单独的列

将SQL列解析为单独的列,sql,sql-server,Sql,Sql Server,我希望将sql列结果解析为单独的列。下面是一个列的示例 详细信息-列名称 'TaxID changed from "111" to "333". Address1 changed from "542 Test St." to "333 Test St". State changed from "FL" to "DF". Zip changed from "11111" to "22222". Country changed from "US" to "MX". CurrencyCode chan

我希望将sql列结果解析为单独的列。下面是一个列的示例

详细信息-列名称

'TaxID changed from "111" to "333". Address1 changed from "542 Test St." to "333 Test St". State changed from "FL" to "DF". Zip changed from "11111" to "22222". Country changed from "US" to "MX". CurrencyCode changed from "usd" to "mxn". RFC Number changed from "" to "test". WarehouseID changed from "6" to "1". '
我需要把旧出租车、新出租车、旧国家和新国家分别放在不同的列中。
“详细信息”列将始终包含TAXID和Country,但具有挑战性的是,它们并不总是包含我上面列出的其余数据。有时它会包含城市,有时则不会。这意味着顺序总是不同的。

我将创建一个tsql过程,使用case语句。 对双引号进行计数。如果有8个OAIR,你知道你有旧的和新的值,只有4对你只有新的值。 然后使用双引号作为子字符串的索引,可以将值放入表中


祝你好运

我想出了一些有效的办法

如果其他人再次遇到这种情况,也许发布我的代码会有所帮助

声明@document varchar(350)

set@document='TaxID从“111”更改为“222”'

声明@FIRSTQUOTE int

声明@SECONDQUOTE int

声明@OLDTAXID nvarchar(40)

声明@firstlength int

声明@ThirdQuote int

声明@FourthQuote int

声明@secondlength int

声明@NewTAXID nvarchar(40)

声明@oneplussecondquote int

声明@oneplusthirdquote int

选择@FirstQuote=CHARINDEX(“,@document)

设置@FIRSTQUOTE=@FIRSTQUOTE+1

选择@SECONDQUOTE=CHARINDEX(“,@document,@FIRSTQUOTE)

设置@firstlength=@SECONDQUOTE-@FIRSTQUOTE

选择@OLDTAXID=SUBSTRING(@document、@FIRSTQUOTE、@firstlength)

设置@oneplussecondquote=@SECONDQUOTE+1

选择@ThirdQuote=CHARINDEX(“,@document,@oneplussecondquote)

设置@oneplusthirdquote=@ThirdQuote+1

选择@FourthQuote=CHARINDEX(“”,@document,@oneplusthirdquote)

选择@secondlength=@FourthQuote-@oneplusthirdquote

选择@NewTAXID=SUBSTRING(@document,@oneplusthirdquote,@secondlength)

您可以切换出以下字符串:'国家从“US”更改为“MX”'
它会抓住旧国家和新国家

您使用的是哪种数据库管理系统?博士后?Oracle?您应该修复表设计,而不是将所有数据放在一起。我看到的问题不是一个简单的字段分隔符,因为
也可以是字段数据的一部分。不幸的是,表的设计超出了我的控制范围。我正在使用sql server 2014