34,593
社区成员
发帖
与我相关
我的任务
分享
CREATE FUNCTION [dbo].[SplitStr]
(
@string nvarchar(max),
@symbol nvarchar(10)
)
RETURNS @table TABLE(id int identity,value nvarchar(max))
AS
begin
DECLARE @splitlen int
SET @splitlen=LEN(@symbol)-1
WHILE CHARINDEX(@symbol,@string)>0
BEGIN
INSERT @table(value) VALUES(LEFT(@string,CHARINDEX(@symbol,@string)-1))
SET @string=STUFF(@string,1,CHARINDEX(@symbol,@string)+@splitlen,'')
END
INSERT @table(value) VALUES(@string)
return
end
go
;with t as (
select 1 as id,'abcdefghei dsfdf our number 123456 fdadsfaf' as a
union all
select 2,'abcdefghei dsfdf our number 123456789 fdadsfaf' as a
union all
select 3,'abcdefghei dsfdf our number 12345-6789 fdadsfaf and our number 123' as a
),tt as (
select a.*,b.id as loc,b.value from t a
cross apply (select * from dbo.splitstr(a.a,' ')) b
)
select * from tt a where exists(select top 1 1 from tt where loc=a.loc-2 and value='our') and exists(select top 1 1 from tt where loc=a.loc-1 and value='number')
忘了把函数扔出来;with t as (
select 1 as id,'abcdefghei dsfdf our number 123456 fdadsfaf' as a
union all
select 2,'abcdefghei dsfdf our number 123456789 fdadsfaf' as a
union all
select 3,'abcdefghei dsfdf our number 12345-6789 fdadsfaf and our number 123' as a
),tt as (
select a.*,b.id as loc,b.value from t a
cross apply (select * from caigou_2017_query.dbo.splitstr(a.a,' ')) b
)
select * from tt a where exists(select top 1 1 from tt where loc=a.loc-2 and value='our') and exists(select top 1 1 from tt where loc=a.loc-1 and value='number')
DECLARE @str NVARCHAR(MAX)='abcdefghei dsfdf our number 123456 fdadsfaf' --字符串
SELECT CASE WHEN CHARINDEX('our number', @str) > 0
THEN SUBSTRING(@str,
CHARINDEX('our number', @str) + LEN('our number')
+ 1, 6)
ELSE ''
END