sql语句中的like可以用什么代替

sql语句中的like可以用什么代替,第1张

可以使用CHARINDEX 和 PATINDEX两种函数,但是速度不一定快,这要分情况的。

以下引用自SQL使用帮助:

CHARINDEX

返回字符串中指定表达式的起始位置。

语法

CHARINDEX ( expression1 , expression2 [ , start_location ] )

参数

expression1

一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类的表达式。

expression2

一个表达式,通常是一个用于搜索指定序列的列。expression2 属于字符串数据类型分类。

start_location

在 expression2 中搜索 expression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。

PATINDEX

返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

语法

PATINDEX ( '%pattern%' , expression )

参数

pattern

一个字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个和最后一个字符时除外)。pattern 是短字符数据类型类别的表达式。

expression

一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。

比较

CHARINDEX 和 PATINDEX

CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置。PATINDEX 可使用通配符,而 CHARINDEX 不可以。

这两个函数都带有两个参数:

希望获取其位置的模式。使用 PATINDEX,模式是可以包含通配符的字面字符串。使用 CHARINDEX,模式是字面字符串(不能包含通配符)。

字符串值表达式(通常为列名),Microsoft® SQL Server™ 在其中搜索指定的模式。

例如,查找模式"wonderful"在 titles 表中 notes 列的某一特定行中的开始位置。

USE pubs

SELECT CHARINDEX('wonderful', notes)

FROM titles

WHERE title_id = 'TC3218'

下面是结果集:

----------------

46

(1 row(s) affected)

如果未限制搜索的行,查询将返回表中的所有行,并对在其中查找到该模式的所有行报告非零值,对其它行报告零值。

例如,使用通配符查找模式"candies"在 Categories 表中的 Description 列的任一行中的开始位置:

USE Northwind

GO

SELECT CategoryID, PATINDEX('%candies%', Description)AS POSITION

FROM Categories

WHERE PATINDEX('%candies%', Description) <>0

如果没有限制要搜索的行,查询将返回表中的所有行,对在其中找到该模式的所有行报告非零值。

PATINDEX 对 text 数据类型很有用;除 IS NULL、IS NOT NULL 和 LIKE(这些是 WHERE 子句中对 text 类型有效的仅有的其它比较运算)外,PATINDEX 也可用于 WHERE 子句中。

1.不用like,不知你那是一个什么列,如果是不太长的字符串列,可以考虑建立一个手工的哈希索引,就是把那个原本要搜索的列转换为crc32()后的一串数字,然后再搜索的时候用 = crc32('keyword'), 这个是优化的一种方法,效率比like好很多

如果只是字符左端或者右端是要查找的重点 可以用left()或者right() 截取一部分来查找 还是用 =

如果是text的列,那只能用全文索引了

2.字符拼接?你是不是用了CONCAT('xx','xx')这个函数?这个就是把字符串拼起来的函数

运算应该就是简单的加减乘除运算吧,或者有NOW()之类的函数,在简单的sql查询里也不可能进行太复杂的运算 *** 作。他提这点,应该是你的语句使mysql不能使用查询缓存,导致效率低

新浪的意思大概就是你的sql效率太低,需要优化,你可以看看sql语句,有哪些优化的地方,优化优化就好了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5900201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存