当前位置: 首页 > 面试题库 >

SQL中是否有“ IKE”和“泪N”的组合?

宿建本
2023-03-14
问题内容

在SQL I中,(不幸的)我经常不得不使用“ LIKE”条件,因为数据库违反了几乎所有的规范化规则。我现在无法更改。但这与问题无关。

此外,我经常使用条件WHERE something in (1,1,2,3,5,8,13,21)来提高SQL语句的可读性和灵活性。

有没有可能在不编写复杂的子选择的情况下将这两件事结合起来的方法

我想要一些简单WHERE something LIKE ('bla%', '%foo%', 'batz%')而不是这样的东西:

WHERE something LIKE 'bla%'
OR something LIKE '%foo%'
OR something LIKE 'batz%'

我在这里使用SQl Server和Oracle,但是我很感兴趣是否可以在任何RDBMS中实现。


问题答案:

在SQL中没有LIKE&IN的组合,在TSQL(SQL Server)或PLSQL(Oracle)中则少得多。部分原因是因为建议使用全文搜索(FTS)。

Oracle和SQL Server FTS实现都支持CONTAINS关键字,但是语法仍然略有不同:

甲骨文:

WHERE CONTAINS(t.something, 'bla OR foo OR batz', 1) > 0

SQL Server:

WHERE CONTAINS(t.something, '"bla*" OR "foo*" OR "batz*"')

您要查询的列必须是全文索引。



 类似资料:
  • 问题内容: 是否可以合并并在SQL Server查询中使用? 所以,这个查询 查找以下任何可能的匹配项: 等等… 问题答案: 实际上,IN语句创建了一系列OR语句…因此 是有效的 不幸的是,这就是您必须在LIKE语句中采用的方法

  • 问题内容: 我有一个SQL选择如下: 实际中 在这个 更复杂的选择中。是字符串(varchar)。如何扩展该sql以从中选择行, 就像 文本来自(而不是完全等于)? 问题答案: 如果您在表2的文本列中有通配符表达式,则可以这样做。 否则,您需要在查询中添加。

  • 问题内容: 我想从表中选择一些行,这些行具有某些在编写存储过程时尚不知道的值。例如,在图书馆数据库中搜索特定类型的书籍: 凡我想成为一个运行,也许下一个,这取决于用户的选择。如何在运行时更改表达式? 不幸的是,我仍然有很多关于SQL的知识,并且不确定我是否在问一个有意义的问题。我将不胜感激! 问题答案: 这比您在SQL Server 2005中可能想像的要棘手(2008具有表值参数,这使其更容易)

  • 问题内容: 当然,有一种框架方法可以给定整数,字符串等数组,将它们转换为可在SQL“ ”子句中使用的列表? 例如 会去 问题答案: var inClause = “(“ + String.Join(“,”, values.Select(x => x.ToString()).ToArray()) + “)”; 注意 :您不再需要在.NET Framework 4中调用。添加了一个新方法。

  • 问题内容: 如果我有这样的查询: 并且我在该字段上有一个索引,SQL Server仍然使用该索引吗? 问题答案: 是啊,没错。如果您的表有10,000条记录,而(1,2,3)中只有5条记录,那么它很可能会使用索引来获取记录。但是,如果发现9,000条记录具有in(1,2,3),则它很可能只是执行表扫描以获取对应的s,因为仅遍历整个表比遍历每个表更快索引树的分支,并分别查看记录。 SQL Serve

  • 问题内容: 我正在构建一些使用参数化值的准备好的语句。举个例子: 有时可能是。在这种情况下,我希望查询返回其中is的记录,但是上面的查询不会这样做。我了解到可以使用运算符。换一种说法: 除了对的不同处理之外,还有其他两种方式可以使上述两个语句的行为有所不同?如果不是,而是说,那该怎么办?在这种情况下,使用操作员是安全(又理智)的事情吗?我应该采取其他方法吗? 问题答案: 您需要从Foo获得Bar