在sql表条目中查找重复单词

在sql表条目中查找重复单词,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个名为“EntityName”和“entityid”的列 任何人都可以通过查询找到这些类型的重复单词。如果您使用SQL Server 2017,您可以使用STRING\u SPLIT尝试以下查询: CREATE TABLE #TestData(Entityid int,Situation varchar(100)) INSERT #TestData(Entityid,Situation)VALUES (1234,'ABC inch EFG inch'), (3456,'inch aaa

我有一个名为“EntityName”和“entityid”的列


任何人都可以通过查询找到这些类型的重复单词。

如果您使用
SQL Server 2017
,您可以使用
STRING\u SPLIT
尝试以下查询:

CREATE TABLE #TestData(Entityid int,Situation varchar(100))

INSERT #TestData(Entityid,Situation)VALUES
(1234,'ABC inch EFG inch'),
(3456,'inch aaa inch vvv'),
(7890,'BBBB aaa inch vvv')

SELECT *
FROM #TestData d
WHERE EXISTS(SELECT value FROM STRING_SPLIT(d.Situation,' ') WHERE value<>N'' GROUP BY value HAVING COUNT(*)>1)

DROP TABLE #TestData

如果使用
SQL Server 2017
,可以使用
STRING\u SPLIT
尝试以下查询:

CREATE TABLE #TestData(Entityid int,Situation varchar(100))

INSERT #TestData(Entityid,Situation)VALUES
(1234,'ABC inch EFG inch'),
(3456,'inch aaa inch vvv'),
(7890,'BBBB aaa inch vvv')

SELECT *
FROM #TestData d
WHERE EXISTS(SELECT value FROM STRING_SPLIT(d.Situation,' ') WHERE value<>N'' GROUP BY value HAVING COUNT(*)>1)

DROP TABLE #TestData

您可以尝试以下操作:

DECLARE @DataSource TABLE
(   
    [EntityID] INT
   ,[Situation] VARCHAR(MAX)
);

INSERT INTO @DataSource ([EntityID], [Situation])
VALUES (1234, 'ABC inch EFG inch')
      ,(3456, 'inch aaa inch vvv')
      ,(1, 'only one inch');

DECLARE @Search VARCHAR(12) = 'inch';

SELECT *
FROM @DataSource
WHERE CHARINDEX(@Search, [Situation]) > 0
    AND CHARINDEX(@Search, STUFF([Situation], CHARINDEX(@Search, [Situation]), LEN(@Search), '')) > 0;
这样做的目的是检查您的单词是否匹配,然后替换它并检查是否存在其他匹配项


当然,这是非常简单的匹配。如果为了在T-SQL上下文中获得正则表达式支持而实现函数,则可以添加更复杂的条件。

您可以尝试以下操作:

DECLARE @DataSource TABLE
(   
    [EntityID] INT
   ,[Situation] VARCHAR(MAX)
);

INSERT INTO @DataSource ([EntityID], [Situation])
VALUES (1234, 'ABC inch EFG inch')
      ,(3456, 'inch aaa inch vvv')
      ,(1, 'only one inch');

DECLARE @Search VARCHAR(12) = 'inch';

SELECT *
FROM @DataSource
WHERE CHARINDEX(@Search, [Situation]) > 0
    AND CHARINDEX(@Search, STUFF([Situation], CHARINDEX(@Search, [Situation]), LEN(@Search), '')) > 0;
这样做的目的是检查您的单词是否匹配,然后替换它并检查是否存在其他匹配项


当然,这是非常简单的匹配。如果为了在T-SQL上下文中获得正则表达式支持而实现函数,则可以添加更复杂的条件。

您应该已经熟悉了-因此您应该知道这个问题被认为是低质量的。此外,样本数据最好作为+。请将您的问题包括在内,您当前的尝试和您想要的结果。关于更多细节,您应该已经熟悉了-所以您应该知道这个问题被认为是低质量的。此外,样本数据最好作为+。请将您的问题包括在内,您当前的尝试和您想要的结果。有关更多详细信息,此变体只能找到
英寸
。其他词呢?ABC,EFG@Sruthi Suresh-或者它不需要?您可以按照regex matches SQL CLR实现答案中的链接进行操作。当然,如果需要,可以使用正则表达式将字符串拆分为单词,并按匹配和计数进行分组。@Leran2002我的问题只是我需要的一个示例,在这种情况下,这就足够了。您的答案很完美,但不支持sql server 2012此变体仅查找
inch
。其他词呢?ABC,EFG@Sruthi Suresh-或者它不需要?您可以按照regex matches SQL CLR实现答案中的链接进行操作。当然,如果需要,可以使用正则表达式将字符串拆分为单词,并按匹配和计数进行分组。@Leran2002我的问题只是我需要的一个示例,在这种情况下,这就足够了。您的答案很完美,但不支持sql server 2012
DECLARE @DataSource TABLE
(   
    [EntityID] INT
   ,[Situation] VARCHAR(MAX)
);

INSERT INTO @DataSource ([EntityID], [Situation])
VALUES (1234, 'ABC inch EFG inch')
      ,(3456, 'inch aaa inch vvv')
      ,(1, 'only one inch');

DECLARE @Search VARCHAR(12) = 'inch';

SELECT *
FROM @DataSource
WHERE CHARINDEX(@Search, [Situation]) > 0
    AND CHARINDEX(@Search, STUFF([Situation], CHARINDEX(@Search, [Situation]), LEN(@Search), '')) > 0;