2015-11-02 106 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’改變」,它會抓住老的國家,新的國家