Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 与表中的字符串进行比较_Sql Server 2008_Substring - Fatal编程技术网

Sql server 2008 与表中的字符串进行比较

Sql server 2008 与表中的字符串进行比较,sql-server-2008,substring,Sql Server 2008,Substring,我有两列数据相似(如下所示) 表1 CHMedicalCorpINC UniversalStd SummitCorp 表2 CHMedicalCorp UniversalStdOrlando SummitCorpINC 我想逐字比较这两栏;如果我使用的是子字符串,那么它会显示与13个字母或完全匹配的值 因此,输出只提供CHMedicalCorp而不提供其他两列。我想显示另外两列 SUBSTRING(a.table1, 1, 13) = SUBSTRING(c.table

我有两列数据相似(如下所示)

表1

CHMedicalCorpINC  
UniversalStd  
SummitCorp  
表2

CHMedicalCorp  
UniversalStdOrlando  
SummitCorpINC 
我想逐字比较这两栏;如果我使用的是子字符串,那么它会显示与13个字母或完全匹配的值

因此,输出只提供
CHMedicalCorp
而不提供其他两列。我想显示另外两列

SUBSTRING(a.table1, 1, 13) = SUBSTRING(c.table2, 1, 13)  

我想让它告诉我任何匹配到13或更少的东西。有没有一种方法可以做到这一点,或者有一个函数可以让我做到这一点

如果下面的查询在表中有任何Id,它将工作

SELECT T1.*
FROM TableName T1
JOIN TableName T2 ON T2.Id = T1.Id
WHERE T1.Table1 like '%' + T2.Table2 + '%'
   OR T2.Table2 like '%' + T1.Table1 + '%';
如果表中没有Id,可以使用以下方法:

SELECT T1.*
FROM TableName T1, TableName T2 
WHERE T1.Table1 like '%' + T2.Table2 + '%'
   OR T2.Table2 like '%' + T1.Table1 + '%'
使用给定数据执行示例:

DECLARE @TestTable TABLE (Id INT, Table1 VARCHAR (100), Table2 VARCHAR (100));
INSERT INTO @TestTable (Id, Table1, Table2) VALUES 
(1, 'CHMedicalCorpINC', 'CHMedicalCorp'),
(2, 'UniversalStd', 'UniversalStdOrlando'),
(3, 'SummitCorp', 'SummitCorpINC'),
(4, 'Hello', 'Welcome');

SELECT T1.*
FROM @TestTable T1
JOIN @TestTable T2 ON T2.Id = T1.Id
WHERE T1.Table1 like '%' + T2.Table2 + '%'
   OR T2.Table2 like '%' + T1.Table1 + '%'

还有别的办法吗?因为这需要很长时间才能执行。