Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 比较一列与另一列相似的列_Sql_Sql Server - Fatal编程技术网

Sql 比较一列与另一列相似的列

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

我试图写一个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
但是,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”