首页 > 解决方案 > 在 T-SQL 中使用 % 通配符对结果进行子字符串化?

问题描述

我需要从选择结果中提取一个子字符串,该搜索是从同一字符串的一部分进行的!

我需要使用 % 通配符执行搜索。我的问题是,要返回整个列,我只需要将特定内容返回到与查询搜索匹配的列中

例如,假设我有下表:

ID Description
1  Yellow shirt 12345A
2  Red shirt 12345AB
3  Shirt blue 12345ABC
4  Shirt bluee 12345ABCD
3  Shorts small Product 12388X
4  Long shorts 12388XY

然后是以下查询:

DECLARE @mystring as varchar(10)
SELECT description from mytable where description like '%' + @mystring + '%'

将返回我:

Yellow shirt 12345A
Red shirt 12345AB
Shirt blue 12345ABC
Shirt bluee 12345ABCD

但是我希望它返回给我这个:

12345A
12345AB
12345ABC
12345ABCD

我应该如何过滤它才能达到这样的结果?

谢谢!

标签: tsqlsubstring

解决方案


如果我正确理解您的问题,您正在寻找的是 PATINDEX。

DROP TABLE IF EXISTS #Test;

CREATE TABLE #Test
(
    TestID TINYINT PRIMARY KEY
    ,TestValue VARCHAR(100)
)
;
GO

DECLARE @myString VARCHAR(10) = '12345A';

INSERT INTO #Test
VALUES
(1,  'Yellow shirt 12345A')
,(2,  'Red shirt 12345AB')
,(3,  'Shirt blue 12345ABC')
,(4,  'Shirt bluee 12345ABCD')
,(5,  'Shorts small Product 12388X')
,(6,  'Long shorts 12388XY')
;

SELECT
    *
    ,DerivedColumn = SUBSTRING(TestValue,PATINDEX(CONCAT('%',@myString,'%'),TestValue),LEN(TestValue))
FROM #Test
WHERE PATINDEX(CONCAT('%',@myString,'%'),TestValue) <> 0
;

推荐阅读