检查是否在 SQL 的多列之一中找到字符串
Check if string is found in one of multiple columns in SQL
我想在多个列中搜索一个字符串,以检查它是否存在于任何列中。
我找到了解决方案 here
Thorsten 的回答很简短,但这是针对 mysql 服务器而不是 SQL 服务器的解决方案。
所以我想在 SQL 服务器中应用类似的查询。
这是 Thorsten 建议的查询。
Select *
from tblClients
WHERE name || surname LIKE '%john%'
我试过了
/* This returns nothing */
Select *
from Items
Where ISNULL(Code, '') + ISNULL(Code1, '') = '6922896068701';
Go
/* This generate error Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '|'.
I also used this one in mysql but it does not show the exact match.
*/
Select *
from Items
WHERE Code || Code1 = '6922896068701';
Go
/* This generate error Msg 4145, Level 15, State 1, Line 5
An expression of non-boolean type specified in a context where a condition is expected, near 'Or'. */
Select *
from Items
WHERE Code Or Code1 = '6922896068701';
Go
在SQL服务器中真的可以吗?
注意:J__ 的答案在上面的问题 link 中准确地工作,但我希望在我像 Thorsten 一样查找它的所有列中输入一次比较字符串。
对于 MS SQL 这可能有效;
Select *
from Items
WHERE Code = '6922896068701' Or Code1 = '6922896068701'
实际上,我认为在 WHERE
子句中对每一列进行单独的逻辑检查是可行的方法。如果由于某种原因你不能这样做,考虑使用WHERE IN (...)
子句:
SELECT *
FROM Items
WHERE '6922896068701' IN (Code, Code1);
如果您想要 LIKE
逻辑,那么它会变得棘手。如果您知道匹配代码总是由 numbers/letters 组成,那么您可以尝试:
SELECT *
FROM Items
WHERE ',' + Code + ',' + Code1 + ',' LIKE '%,6922896068701,%';
我建议分别进行两个比较:
WHERE name LIKE '%john%' OR
surname LIKE '%john%'
除非您特别想查找名称组合的时间,例如“Maryjoh”“Needlebaum”或其他名称。
通常最好一次只关注一列,因为这有助于优化器。
我想在多个列中搜索一个字符串,以检查它是否存在于任何列中。
我找到了解决方案 here
Thorsten 的回答很简短,但这是针对 mysql 服务器而不是 SQL 服务器的解决方案。
所以我想在 SQL 服务器中应用类似的查询。
这是 Thorsten 建议的查询。
Select *
from tblClients
WHERE name || surname LIKE '%john%'
我试过了
/* This returns nothing */
Select *
from Items
Where ISNULL(Code, '') + ISNULL(Code1, '') = '6922896068701';
Go
/* This generate error Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '|'.
I also used this one in mysql but it does not show the exact match.
*/
Select *
from Items
WHERE Code || Code1 = '6922896068701';
Go
/* This generate error Msg 4145, Level 15, State 1, Line 5
An expression of non-boolean type specified in a context where a condition is expected, near 'Or'. */
Select *
from Items
WHERE Code Or Code1 = '6922896068701';
Go
在SQL服务器中真的可以吗?
注意:J__ 的答案在上面的问题 link 中准确地工作,但我希望在我像 Thorsten 一样查找它的所有列中输入一次比较字符串。
对于 MS SQL 这可能有效;
Select *
from Items
WHERE Code = '6922896068701' Or Code1 = '6922896068701'
实际上,我认为在 WHERE
子句中对每一列进行单独的逻辑检查是可行的方法。如果由于某种原因你不能这样做,考虑使用WHERE IN (...)
子句:
SELECT *
FROM Items
WHERE '6922896068701' IN (Code, Code1);
如果您想要 LIKE
逻辑,那么它会变得棘手。如果您知道匹配代码总是由 numbers/letters 组成,那么您可以尝试:
SELECT *
FROM Items
WHERE ',' + Code + ',' + Code1 + ',' LIKE '%,6922896068701,%';
我建议分别进行两个比较:
WHERE name LIKE '%john%' OR
surname LIKE '%john%'
除非您特别想查找名称组合的时间,例如“Maryjoh”“Needlebaum”或其他名称。
通常最好一次只关注一列,因为这有助于优化器。