问题标签 [sql-like]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4288 浏览

c# - 我将使用什么代码将类似 SQL 的表达式即时转换为正则表达式?

我正在寻找将类似 SQL 的语句即时转换为等效的正则表达式,即

这样做的最佳方法是什么?

PS 我希望在 .Net Framework (C#) 上执行此操作。

0 投票
8 回答
97131 浏览

python - 匹配文件名开头和文件扩展名的正则表达式

匹配以“Run”开头且文件扩展名为“.py”的字符串(在本例中为文件名)的正则表达式是什么?

正则表达式应匹配以下任何一项:

它不应该匹配:

我正在寻找的 SQL 等价物是... LIKE 'Run%.py' ....

0 投票
5 回答
903 浏览

sql - 返回部分匹配值的记录

我正在尝试使查询工作,该查询从表单控件中获取值(有时只是字符串的第一部分)。我遇到的问题是它仅在输入完整字符串时才返回记录。

即在姓氏框中,我应该可以输入 gr,它会弹出

绿色灰色格雷厄姆

但目前它没有提出任何东西,除非使用完整的搜索字符串。

有问题的表单上有 4 个搜索控件,它们仅在填写框的情况下用于查询。

查询是:

0 投票
6 回答
81393 浏览

sql - 什么是全文搜索与 LIKE

我刚刚阅读了一篇在 SQL 中提到“全文搜索”的帖子。

我只是想知道 FTS 和 LIKE 之间的区别是什么。我确实阅读了几篇文章,但找不到任何可以很好地解释它的东西。

0 投票
4 回答
13014 浏览

search - 使用参数使用 Like 运算符避免 SQL 查询中的 SQL 注入?

从我的前任那里接过一些代码,我发现了一个使用 Like 运算符的查询:

试图避免 SQL 注入问题并将其参数化,但我不太确定如何实现。有什么建议么 ?

请注意,我需要一个经典 ADO.NET 的解决方案——我真的没有资格将此代码切换到 LINQ 之类的东西。

0 投票
6 回答
197836 浏览

sql-server - 在 SQL Server 中转义字符串,以便在 LIKE 表达式中使用它是安全的

如何在 SQL Server 的存储过程中转义字符串,以便在LIKE表达式中安全使用。

假设我有一个NVARCHAR像这样的变量:

我想在LIKE表达式中使用它:

如何在 T-SQL 中转义字符串(更具体地说,是对LIKE模式匹配有意义的字符,例如%or ?),以便以这种方式安全使用?

例如,给定:

我想:

匹配'aa%bb''caa%bbc'但不是'aaxbb'or 'caaxbb'

0 投票
5 回答
12956 浏览

reporting-services - 在 SqlServer Reporting Services 查询中组合“like”和“in”?

以下不起作用,但我正在寻找类似这样的东西。

SSRS 使用参数前面的@ 运算符来模拟“in”,我没有找到将字符串与字符串列表匹配的方法。

0 投票
3 回答
2073 浏览

performance - 什么是 SQL Like 运算符的合适替代品以提高性能?

我正在开发一个在 Windows Mobile 6 上运行的应用程序,该应用程序需要能够从项目表中检索所有项目,这些项目表中包含项目描述字段中的给定字符串(由最终用户提供)。问题是表中有大约 170,000 个项目。由于我需要在描述中的任何位置返回包含字符串的所有项目,因此我不得不使用 LIKE %string%,这消除了使用索引的任何机会。数据和表结构最初基于 Progress 数据库,该数据库在任何单词索引字段上都有一个精彩的 contains 运算符。我们的移动应用程序并非如此,因为它使用 SQL Server Compact 3.5。

基本上,我的 DAL 运行查询并检索 SqlCeDataReader,然后使用 ItemFactory 创建仅包含匹配项的 List 对象。这显然让我们将域/业务对象与数据访问层分开。

很好,花花公子,除了当我搜索描述中包含“高尔夫”之类的所有项目时检索项目所需的 8m 和 42s。显然,这不是最终用户可接受的时间范围。

我的第一次尝试是使用 SELECT * FROM Item" (在一个主要索引字段上使用 order by 子句)从数据库中检索所有项目。此时,我在运行 SqlCeDataReader 时运行了 IndexOf 检查并有ItemFactory 仅在项目包含请求的描述文本时才将项目添加到 List 对象。这将速度提高到 1m 46s。不是太破旧,但仍然太慢。

然后我尝试了另一种显示承诺的方法......几乎......当应用程序启动时,我尝试创建一个包含数据库中所有项目对象的列表(运行查询并填充整个列表大约需要 2 分钟,但是至少在应用程序初始化时只有一次......仍然......呃)。列表完成后,我可以轻松地在该列表上运行查询,执行以下操作(我希望我的语法是正确的......我现在不在工作,我的电脑上没有 Visual Studio 我我坐在):

这种方法将其降低到 21 秒。非常好(尽管在宏伟的计划中仍然很慢)。但是,问题是如果我从数据库中加载所有项目,内存使用量太大了。在初始加载期间,我实际上不得不切断最后 20,000 个项目(因此 21 秒的时间范围可能更像是 25 秒),因为抛出了 OutOfMemoryException。根据模拟器上的内存管理器,我仍然有大约 20 MB 的可用 RAM,但我听说一个进程只能有 32 MB 或与之关联的 RAM(不确定 WM 6 是否如此,但它似乎所以)。

为了确保这不是因为我使用 List 对象来保存所有项目(我在其构造函数中使用所需的容量对其进行实例化以避免动态调整大小),我还读过它可能会导致额外的内存使用隐式调用 EnsureCapacity,我尝试使用 Item[] 数组(提前调整大小)。这仍然存在内存问题,并且大小差异可以忽略不计。

好吧,足够的漫无边际。我知道我可能不得不限制数据读取器从数据库返回的记录(通过对不同类型字段的一些索引搜索),然后可能会在较小的项目子集上使用 indexOf 以获得最大性能(因此一起跳过 Like 运算符)。这将导致最终用户必须输入的不仅仅是描述搜索(也许是项目层次结构信息来限制要搜索的项目类型)。

有任何想法吗?我会以错误的方式解决这个问题吗?

感谢收听(抱歉这篇文章很长,我有点想大声)。

哦,我应该添加(只是总结)我正在使用的内容:

  • 视窗手机 6
  • Sql Server 精简版 3.5
  • C# 3.5

更新:虽然下面提到的布隆过滤器方法看起来很有趣,但我无法满足一个要求(我没有在上面真正指定)。我无法真正匹配包含在其他单词中的单词(例如“club”不会返回“clubs”)。因此,我被迫完全使用不同的方法(Kent Fredric ......感谢您指出这一点)。我已将 Kent 的答案标记为正确的答案,因为他的方法是满足最多要求的方法(Mitch,你的问题与 Jaunder 建议的 Bloom 过滤器类似)。但是,我也采取了与他不同的方法(目前......)。

我所做的是将所有项目对象拉入内存,只有项目编号和描述(这使其保持在内存限制之下,但是它仍然会导致比我喜欢的更长的初始化......多线程并在幕后加载该信息我猜在应用程序运行时可以解决这个问题)。为了执行我自己编写的包含例程的搜索。该例程是用非托管 c# 代码编写的,该代码使用两个指针和几个循环来运行描述和所需的匹配文本。如果它在描述的任何地方找到匹配项,它会将项目编号添加到数组中。搜索完所有项目后,新的查询将返回数据库并仅获取匹配的项目编号(由于整数字段上的索引,这非常快)。然后这些项目将在包含所有信息的列表中创建(不仅仅是项目编号和描述)。整个操作大约需要 5 - 10 秒(取决于描述),这对于现在来说已经足够了。

我仍然会考虑进一步优化这个(可能能够跟踪搜索词有多少个字符......如果项目描述中剩余的字符少于所需的文本,则循环可以直接继续到下一个项目) .

仍然欢迎任何建议。现在,我已将肯特的回答标记为我的问题的“最正确”。

感谢 Dolch 帮助我编写 contains 例程。

0 投票
3 回答
22227 浏览

sql - 没有通配符的 SQL LIKE 与 '=' 一样吗?

我知道这是一个非常基本的问题,我我知道答案……但我想确认一下。

这些查询真的等价吗?

在没有通配符的情况下使用 like 可能会产生性能开销?

我有一个可以选择使用 LIKE 和通配符的应用程序。SP 当前执行类似操作并附加通配符 - 我正在考虑更新查询以使用 like 但让应用程序根据需要附加通配符。

0 投票
10 回答
191250 浏览

sql-server - 如何在 LIKE 子句中转义方括号?

我正在尝试使用 like 过滤带有存储过程的项目。该列是 varchar(15)。我要过滤的项目名称中有方括号。

例如: WC[R]S123456

如果我这样做,LIKE 'WC[R]S123456'它不会返回任何东西。

我找到了一些关于使用ESCAPE关键字 with的信息,LIKE但我不明白如何使用它来将方括号视为常规字符串。