【问题标题】:Select * From Table Where Name in like (wildcards)Select * From Table Where Name in like(通配符)
【发布时间】:2020-01-02 09:45:56
【问题描述】:

是否可以结合SQL语句如

SELECT * FROM X WHERE Y LIKE '%a%' OR Y LIKE '%b%' OR Y LIKE '%c%' OR Y LIKE '%d%'

类似的东西

SELECT * FROM X WHERE Y IN ('a', 'b', 'c', 'd')

所以我不必像现在这样写一篇大的声明:

IF NOT EXISTS(SELECT * FROM X WHERE Y LIKE '%a%' OR Y LIKE '%b%' OR Y LIKE '%c%' OR Y LIKE '%d%')
    BEGIN
        /* code */
    END

使用SELECT * FROM X WHERE Y IN LIKE ('%a%', '%b%', etc..) 之类的东西会很好 感谢所有帮助和建议,谢谢。

【问题讨论】:

  • 查看您正在使用的 dbms 的正则表达式。
  • 在 SQL Server 中,您可以执行 WHERE y LIKE '%[a-d]%'。但对我来说,这似乎是一个糟糕的数据库设计。
  • 您使用的是哪种 DMS 产品?
  • 真正的问题是:你在if 部分做什么?为什么不简单地将 WHERE 子句附加到您在其中所做的任何事情上?

标签: sql select


【解决方案1】:

请使用以下代码解决您的问题,如果仍有问题,请尝试让我知道。

SELECT * FROM X WHERE Y LIKE '%[a-d]%'

【讨论】:

  • 这在标准 SQL 中不起作用(sql 标记所指的) - 请提及适用的 DBMS
【解决方案2】:

如果您的数据库支持 RegEx,您可以使用它。例如:

SELECT * FROM X WHERE Y SIMILAR TO '%(a|b|c|d)%' 在 PostgreSQL 中,以及

SELECT * FROM X WHERE Y REGEXP 'a|b|c|d' 在 MySQL 中。

LIKE '%[a-d]%' 不会工作,因为大多数数据库中的LIKEs 不接受正则表达式模式。这只会在字符串中的某处期待文字文本[a-d]。每个数据库如何解释正则表达式(或本机模式)变化很大。所以你需要为你的数据库定制这些东西。例如,以下将在 PostgreSQL 中不起作用

SELECT * FROM X WHERE Y SIMILAR TO 'a|b|c|d'

因为 PostgreSQL 会期望整个字符串是 'a'、'b'、'c' 或 'd'。

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 2011-04-06
    • 2012-12-11
    • 1970-01-01
    • 2015-10-08
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多