将SQL列解析为单独的列

时间:2015-11-02 18:37:58

标签: 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 changed from "usd" to "mxn". RFC Number changed from "" to "test". WarehouseID changed from "6" to "1". '

我需要使用旧的TAXID,新的TAXID,旧的国家和新的国家/地区,并将它们放在单独的列中。 详细信息列将始终具有TAXID和国家/地区,但具有挑战性的部分是他们不总是拥有我在上面列出的其余数据。有时它会包含城市,有时则会包含城市。这意味着订单总是不同。

2 个答案:

答案 0 :(得分:0)

我会创建一个tsql proc,使用case语句。 算一下双引号。如果有8个oairs,你知道你的旧值和新值,只有4对你只有新值。 然后使用双引号作为子字符串的索引,可以将vales放入表中。

祝你好运!

答案 1 :(得分:0)

我能够想出一些有用的东西。

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

DECLARE @document varchar(350);

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

声明@FIRSTQUOTE int

声明@SECONDQUOTE int

声明@OLDTAID 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

选择@OLDTAID = 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” 它会抓住旧国家和新国家