2015-11-02 61 views
0

我正在查看将sql列结果解析为单独的列。这里是列的一个例子...将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,老的国家,新的国家,并把它们放在单独的列。 Detail列将始终有TAXID和Country,但具有挑战性的部分是它们并不总是具有上面列出的其余数据。有时它会包含城市,而其他时间则不包含。这意味着订单总是不同的。

+1

你是哪个DBMS的使用? Postgres的?甲骨文? –

+0

您应该修复表格设计,而不是将所有数据放在一起。我看到的问题并不是一个简单的字段分隔符bac“'。”'也可以是现场数据的一部分 –

+0

不幸的是,表格设计超出了我的控制范围。我正在使用SQL Server 2014 – larwine

回答

0

我会创建一个tsql proc,使用case语句。 做一个双引号计数。如果有8个楼阁,你知道你的新旧价值,只有4对,你只有新的价值。 然后使用双引号作为子字符串的索引,可以将这些值放入表中。

祝你好运!

0

我能够想出有用的东西。

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

DECLARE @document varchar(350);

组@document = 'TaxID从 “111” 变成 “222”'

声明@FIRSTQUOTE诠释

声明@SECONDQUOTE诠释

申报@OLDTAXID为nvarchar(40)

declare @firstlength int

declare @ThirdQuote int

声明@FourthQuote诠释

DECLARE @secondlength INT

申报@NewTAXID为nvarchar(40)

声明@oneplussecondquote诠释

声明@oneplusthirdquote诠释

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

set @FIRSTQUOTE = @FIRSTQUOTE + 1

选择@SECONDQUOTE = CHARINDEX( '“',@文件,@ FIRSTQUOTE)

组@firstlength = @SECONDQUOTE - @FIRSTQUOTE

选择@OLDTAXID = SUBSTRING(@文件,@ FIRSTQUOTE,@ firstlength)

组@oneplussecondquote = @SECONDQUOTE + 1

选择@ThirdQuote = CHARINDEX( '“',@文件,@ oneplussecondquote)

组@oneplusthirdquote = @ThirdQuote + 1

选择@FourthQuote = CHARINDEX( '“',@文件,@ oneplusthirdquote)

选择@secondlength = @FourthQuote - @oneplusthirdquote

选择@NewTAXID =子(@文件,@ oneplusthirdquote,@ secondlength)

您可以切换出字符串此: “国家从‘美’到‘MX’改变”,它会抓住老的国家,新的国家