Sql 比较一列与另一列相似的列
我试图写一个Select语句,在这里我可以看到一列是否像另一列的一部分Sql 比较一列与另一列相似的列,sql,sql-server,Sql,Sql Server,我试图写一个Select语句,在这里我可以看到一列是否像另一列的一部分 tblNames ID FullName FirstName 1 Mr. John Doe, CEO John 2 Mr. Jake Doe, Exec Jake 3 Mrs. Betty Smith, Chair Jill 查询应返回: 3 | Mrs.Betty Smith, Chair | Jill 但是,m
tblNames
ID FullName FirstName
1 Mr. John Doe, CEO John
2 Mr. Jake Doe, Exec Jake
3 Mrs. Betty Smith, Chair Jill
查询应返回:
3 | Mrs.Betty Smith, Chair | Jill
但是,mine只返回表中的每一行:
SELECT ID, FullName, FirstName
FROM tblNames
WHERE '%' + FirstName + '%' not like Fullname
有什么想法吗?试试这个:
SELECT * FROM tblNames
WHERE ISNULL( CHARINDEX (FirstName , FullName),0) = 0
CHARINDEX
将比LIKE
子句更快(性能更好),因为它不必考虑通配符。上面带有少量行的示例数据不会显示性能优势,但在数百万行中,CHARINDEX
的性能会更好。在WHERE
子句中将参数切换到LIKE
:
SELECT ID, FullName, FirstName
FROM tblNames
WHERE Fullname not like '%' + FirstName + '%'
通配符必须是第二个参数。看起来没问题,只是您可能想在where中切换顺序:
WHERE Fullname not like '%' + FirstName + '%'
将where倒转为如下内容:
Fullname not like '%' + FirstName + '%'
这对我很有用:
SELECT *
FROM `table`
WHERE `col1` NOT LIKE CONCAT('%', `col2`, '%')
在这里找到它:
不知何故,它只能与concat函数(?)一起正常工作。括号也可以解决这个问题
SELECT ID, FullName, FirstName
FROM tblNames
WHERE ('%' + FirstName + '%') not like Fullname
Oracle在使用+时需要数字。对于字符串,请使用以下示例:
SELECT ID, FullName, FirstName
FROM tblNames
WHERE FullName like '%' || FirstName||'%'
要将一个表的一列与另一个表的一列进行比较,请执行以下操作
select a.*,table_2_col_1, table_2_col_2 from (select table_1_col_1, table_1_col_2 from table_1 where
) a, table_2 where table_1_col_1 like '%' || table_2_col_1 ||'%'
使用Google BigQuery:
Fullname NOT LIKE ('%' || FirstName || '%')
+1.据我所知,即使是
PATINDEX()
也比等快。无论如何,在这种情况下,CHARINDEX()
是绝对适用的,也是最好的选择。非常感谢您的回答!和你一样,这是唯一一个对我有效的。您是否碰巧发现了原因?很好的一个,感谢您花时间发布它。DB2似乎对like运算符存在问题,其中条件问题是询问“like”,但公认的答案是关于“not like”