我有一个订单表,其中包含由空格分隔的订单详细信息 - 订单详细信息可能包含多个项目(是的,我知道这会破坏数据库约定,但它是我们的第三方数据库之一)。我已经能够提取它,但解决方案不是很优雅。不确定你们有没有更好的解决方案?
实施例: 详细信息列 [订单类型] [数量] [项目] [其他信息] [订单类型] [数量] [项目] [其他信息] ......
因此每列可能包含多个订单商品
答案 0 :(得分:0)
这可以通过修改现有的字符串分割器函数之一来实现,这样它不仅可以返回单词,还可以返回原始字符串中的数字。然后你必须寻找单词' Buy'和'销售',得到他们的数字,接下来的两个单词分别是数量和项目。
<强>查询强>:
declare @str varchar(1000)
set @str = 'Buy 1 AAA Oct 2008 Sell 1 AAA Nov 2008 Buy 3 JJJ Jan 2009'
;with words as (
select word, wordNum
from ftStringSplit(@str, ' ')
),
tokenNums as (
select wordNum + 1 as wnQty, wordNum+2 wnItem
from words
where word in ('Buy', 'Sell')
)
select wI.word as Item, wQ.word as Qty
from tokenNums tn
join words wI on wI.wordNum = tn.wnItem
join words wQ on wQ.wordNum = tn.wnQty
<强>输出强>:
| ITEM | QTY |
|------|-----|
| AAA | 1 |
| AAA | 1 |
| JJJ | 3 |
参见 SQL Fiddle 示例