SQL Server:仅在括号中返回文本



我在列中存储了文本;在数百行中。文本为VARCHAR,在500-5000个字符中的任何位置。我只想返回2个括号之间的数字。

所以这是一个示例

abcd(22135)  
hhgygas(52142)dijijijs  
whatisthis(33234) i have no idea (22342)

,结果应为

22135  
52142  
33234  
22342  

您可以尝试使用substring功能仅提取数字。尝试这样的事情:

DECLARE @x VARCHAR(max);
SET @x = 'lmfasdfa(1234567)asdfasdfaff'

SELECT
    SubString(@x,CHARINDEX('(',@x)+1,CHARINDEX(')',@x)-CHARINDEX('(',@x)-1) AS numbers1

输出看起来像:

1234567

您可以使用udf,并使用十字架来获取所有值。

create table tbl (txt varchar(max));
insert into tbl values
('abcd(22135)'), 
('hhgygas(52142)dijijijs'),
('whatisthis(33234) i have no idea (22342)');
GO
create function dbo.getValues(@txt varchar(max)) 
returns @t table
(val varchar(20))
as
begin
    declare @p1 int, @p2 int;
    set @p1 = 0;
    set @p2 = 0;
    while charindex('(', @txt, @p2) <> 0
    begin
        set @p1 = charindex('(', @txt, @p2);
        if @p1 = 0 return;
        set @p2 = charindex(')', @txt, @p1);
        if @p2 = 0 return;
        insert into @t values(substring(@txt, @p1 + 1, @p2 - @p1 - 1));
    end
    return;
end
GO
select f.val
from   tbl
cross apply dbo.getValues(tbl.txt) f
GO
|瓦尔||:---- ||22135 ||52142 ||33234 ||22342 |

dbfiddle在这里

获取ngrams2b的副本,您可以做到这一点:

-- Sample data
DECLARE @table TABLE (someid int identity, col1 varchar(max));
INSERT @table VALUES
('abcd(22135)'),
('hhgygas(52142)dijijijs'),
('whatisthis(33234) i have no idea (22342)'),
('nothing to see here');
-- Solution    
SELECT 
  t.someid,
  numbers = 
    substring(t.col1, position+1,nullif(charindex(')', t.col1, position+1),0)-position-1)
FROM @table t
CROSS APPLY dbo.ngrams2b(t.col1,1)
WHERE token = '(';

结果

someid      numbers
----------- --------
1           22135
2           52142
3           33234
3           22342

相关内容

  • 没有找到相关文章

最新更新