SQL- 需要字符串列中的数字
SQL- Need numbers from a column for string
我有一个table这样的。
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
我需要一个查询,它会给出如下输出
(只有第 2 列 mes_for_col 中除号前的数字)
column1 column2
4717 4711
4717 4712
4717 4713
4729 4723
4729 4724
4729 4725
4729 4726
4788 4780...
等等
我可以在这里使用 patindex 吗?您有什么疑问可以建议吗?
谢谢
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
....
我有一个table这样的。
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
我需要一个查询,它会给出如下输出 (只有第 2 列 mes_for_col 中除号前的数字)
column1 column2
4717 4711
4717 4712
4717 4713
4729 4723
4729 4724
4729 4725
4729 4726
4788 4780...
等等
我可以在这里使用 patindex 吗?您有什么疑问可以建议吗? 谢谢
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
....