在sql表条目中查找重复单词
我有一个名为“EntityName”和“entityid”的列在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
任何人都可以通过查询找到这些类型的重复单词。如果您使用
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;