在 SQL 查询中,我想查找与给定文本模式匹配但模式的一部分与特定值不同的记录。例如,
Page
表的记录可能具有 PageId
字段和 Description
文本字段,如下所示:
PageId: 3718
Description: Page 3718 contains... Page 3718 contains...
我知道我可以构建一个 LIKE 条件来匹配
PageId
:
Description LIKE '%Page ' + CAST(P.PageId as varchar(8)) + ' contains%'
但我想要的却恰恰相反。我想查找
Description
字段中至少有一个页面 ID 与实际 PageId
值不匹配的记录。这将使我能够检测如下记录:
PageId: 3718
Description: Page 4092 contains... Page 3718 contains...
我知道如何在代码中使用正则表达式来做到这一点,但是我如何在 SQL 中做到这一点?
举个例子...
CREATE TABLE SQL_Server_Query
(PageId INT PRIMARY KEY,
"Description" VARCHAR(max));
INSERT INTO SQL_Server_Query VALUES
(3718, 'Page 3718 contains... Page 3718 contains...: Page 3718 contains... Page 3718 contains...'),
(3719, 'Page 4092 contains... Page 3719 contains...');
查询可以是:
SELECT PageId
FROM SQL_Server_Query
CROSS APPLY STRING_SPLIT(REPLACE("Description", 'Page ', CHAR(0)), CHAR(0))
WHERE value NOT LIKE CAST(PageId AS VARCHAR(32)) + '%'
AND value <> ''