我想知道LIKE运算符是如何分类的,我有一个查询,其中有许多链式LIKE语句。以下结果在返回时如何优先排序?
AND (
ic.COLUMN_NAME like '%Address%'
OR ic.COLUMN_NAME like '%Email%'
OR ic.COLUMN_NAME like '%Phone%'
OR ic.COLUMN_NAME like '%Bank%'
OR ic.COLUMN_NAME like '%Number%'
OR ic.COLUMN_NAME like '%NAME%'
OR ic.COLUMN_NAME like '%Postcode%'
Run Code Online (Sandbox Code Playgroud)
只是为了补充说明,因为我认为有些人可能没有完全理解我的问题,我将举一个例子:
假设我正在寻找地址(而不是电子邮件)并且我使用以下语句:
select * from INFORMATION_SCHEMA.COLUMNS IC
where ic.COLUMN_NAME like '%Address%'
Run Code Online (Sandbox Code Playgroud)
这是我要回来的:
我用下面的代码做同样的事情:
select * from INFORMATION_SCHEMA.COLUMNS IC
where ic.COLUMN_NAME like '%Email%'
--OR ic.COLUMN_NAME like '%Email%'
Run Code Online (Sandbox Code Playgroud)
然后我得到这个:
这意味着在第一种情况下,我将取回地址和电子邮件地址。我知道它们只是字符串,但是我如何才能搜索地址而不取回电子邮件地址,例如email_address1、address_email1、web_Address_email等。我不想使用 ,where Column_Name = 'Address'因为这意味着我会错过不同的名称,例如地址 1、地址 2等
INFORMATION_SCHEMA您应该使用 SQL Server 视图,而不是使用对象,例如sys.objects.
例如:
SELECT s.name
, o.name
, c.name
FROM sys.schemas s
INNER JOIN sys.objects o ON s.schema_id = o.schema_id
INNER JOIN sys.columns c ON o.object_id = c.object_id
WHERE c.name LIKE 'Address%'
OR c.name LIKE 'Email%';
Run Code Online (Sandbox Code Playgroud)
请注意WHERE上面的条款,我有LIKE 'Address%' OR LIKE 'Email%'?这是一个逻辑 OR 操作,其中列名可以是任何以地址或电子邮件开头的内容。
如果您创建一个简单的表:
CREATE TABLE dbo.SomeTable
(
AddressLine1 varchar(100) NOT NULL
, EmailAddress varchar(256) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
并运行上面的查询,您会看到以下结果:
??????????????????????????????????????? ? 姓名 ?姓名 ?姓名 ? ??????????????????????????????????????? ? 德博?一些表?地址第一行 ? ? 德博?一些表?电子邮件地址 ? ???????????????????????????????????????
LIKE 将一个字符串的内容与另一个字符串进行匹配,通常使用通配符来匹配任何未知的字符组合。
因此,例如,如果您有一列包含以下数据:
????????? ? 水果 ? ????????? ? 橘子 ? ? 苹果 ? ? 葡萄? ? 香蕉 ? ? 梨 ? ?????????
然后你LIKE对它进行比较:
WHERE fruit LIKE '%ap%'
Run Code Online (Sandbox Code Playgroud)
您将获得以下行列出:
????????? ? 水果 ? ????????? ? 苹果 ? ? 葡萄? ?????????
如果您只需要列值以“apple”开头的行,则需要使用:
WHERE fruit LIKE 'apple%'
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,通配符 ,%仅出现在单词 的末尾apple,表示我们将接受以开头的 匹配项apple。
如果我们运行这个:
WHERE fruit = 'apple'
Run Code Online (Sandbox Code Playgroud)
我们只得到整个列值等于 的行apple。
如果您想要包含两个字母的所有结果ap,但您想排除grape,您可以这样做:
WHERE fruit LIKE '%ap%'
AND fruit <> 'grape'
Run Code Online (Sandbox Code Playgroud)
如果您想要ap单词中任何位置的所有数据,但没有以 开头gra,您可以这样做:
WHERE fruit LIKE '%ap%'
AND NOT (fruit LIKE 'gra%')
Run Code Online (Sandbox Code Playgroud)
该LIKE运营商不优先考虑它的结果。它只是返回与结果匹配的所有行。
来自T-SQL LIKE 运算符的Microsoft Docs:
确定特定字符串是否与指定模式匹配。模式可以包括常规字符和通配符。在模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。但是,通配符可以与字符串的任意片段匹配。使用通配符使 LIKE 运算符比使用 = 和 != 字符串比较运算符更灵活。