【问题标题】:Filter in select where values start with NIR_过滤选择值以 NIR_ 开头的位置
【发布时间】:2016-07-11 12:06:46
【问题描述】:

我正在尝试过滤我的结果集以仅返回以NIR_ 开头的值。

我这样做的SQL语句如下

select * from run where name like %NIR_% 

结果集还包括类似的名称

NIRMeta_Invalid
NIRMeta_Position 

我不确定我做错了什么。我只需要选择以NIR_开头的名字。

【问题讨论】:

    标签: sql sql-server wildcard sql-like startswith


    【解决方案1】:

    如果您希望将 LIKE 模式中的下划线视为文字,则需要对其进行转义。

    在 SQL Server 中:

    select * from run where name like 'NIR[_]%'
    

    在 MySQL 和 Oracle 中:

    select * from run where name like 'NIR\_%'
    

    【讨论】:

    • 对不起,我忘了说,我使用的是 SQL Server 2014。是的,第一个 select 语句有效。谢谢。
    【解决方案2】:

    如果您想要仅以 NIR 开头的名称,则删除 like 模式中的第一个通配符:

    where name like 'NIR_%'
    

    请注意,_ 也是通配符,因此您可能需要:

    where name like 'NIR\_%'
    

    【讨论】:

      【解决方案3】:

      您可以使用ESCAPE 选项来实现这一点。

      SELECT * FROM run WHERE name LIKE 'NIR#_%' ESCAPE '#'
      

      使用给定数据的示例执行:

      DECLARE @Run TABLE (name VARCHAR (100));
      
      INSERT INTO @Run (name) VALUES 
      ('NIR_MA'), ('NIR_RUN'), ('NIRMeta_Invalid'), ('NIRMeta_Position');
      
      SELECT * FROM @Run WHERE name LIKE 'NIR#_%' ESCAPE '#'
      

      结果:

      name
      -----
      NIR_MA
      NIR_RUN
      

      【讨论】:

        猜你喜欢
        • 2012-02-26
        • 2018-10-21
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 1970-01-01
        相关资源
        最近更新 更多