1

我有一张这样的桌子。

MES_id        MES_for_col
4717       4717 = ( 4711 + 4712 + 4713)/ 3
4729       4729 = ( 4723 + 4724 + 4725 + 4726)/4 
4788       4788 = ( 4780 + 4781 + 4782 + 4783 + 4784 + 4785 )/6 
4795       4795 = ( 4793 + 4794 ) / 2 

我需要一个查询,它会给出类似的输出(只有在 column2 中来自 mes_for_col 的除号之前的数字)

column1    column2
4717         4711
4717         4712
4717         4713
4729         4723
4729         4724
4729         4725
4729         4726
4788         4780...

等等

我可以在这里使用 patindex 吗?您有什么问题可以提出建议吗?谢谢

4

1 回答 1

2

Patindex 只需要 2 个参数。如果你想逐步搜索,使用 CHARINDEX 会更好,因为你可以给它一个起始位置。但是,您可以使用 XML 进行拆分。您需要过滤掉“=”之前和“/”之后的文本,然后将所有不想包含的字符替换为任何内容。

试试这个:

DECLARE @t table(MES_id int, MES_for_col varchar(max))
INSERT @t values
(4717, '4717 = ( 4711 + 4712 + 4713)/ 3'),
(4729, '4729 = ( 4723 + 4724 + 4725 + 4726)/4'),
(4788, '4788 = ( 4780 + 4781 + 4782 + 4783 + 4784 + 4785 )/6'),
(4795, '4795 = ( 4793 + 4794 ) / 2')

SELECT MES_id, t.c.value('.', 'VARCHAR(2000)') as column2
FROM (
    SELECT MES_id, x = CAST('<t>' + 
        REPLACE(REPLACE(REPLACE(REPLACE(STUFF(SUBSTRING(MES_for_col, 0,
        CHARINDEX('/', MES_for_col)), 1, CHARINDEX('=', MES_for_col), ''), 
        ' ', ''), ')', ''), '(', ''),  '+', '</t><t>') + '</t>' AS XML)
    FROM @t
) a
CROSS APPLY x.nodes('/t') t(c)

结果:

MES_id  column2
4717    4711
4717    4712
4717    4713
4729    4723
4729    4724
....
于 2015-03-11T12:44:30.193 回答