【问题标题】:tsql using like with wildcard and trailing space?tsql 使用 like 与通配符和尾随空格?
【发布时间】:2011-03-18 00:40:35
【问题描述】:

我无法让 like 语句与空格和尾随通配符一起使用。 我的查询如下:

select * from Table where Field like 'Desc_%'

数据以空格分隔,例如 Desc Top、Desc Bottom 等。当我使用模式“Desc_%”时查询有效,但当我使用模式“Desc %”时查询无效。该字段是 nvarchar(255)。

有什么想法吗?

编辑

原来数据是制表符分隔的,当我从 2008 Management Studio 复制一个值时,它会将制表符转换为空格。愚蠢的错误。我确实喜欢 [ ] 提示,所以我将其标记为答案。谢谢大家,我会记住不要相信网格结果中的副本。

【问题讨论】:

  • “like 'Desc%'”不起作用的具体原因是什么?
  • @AllenG -“LIKE Desc%”不会将自身限制为“Desc”(D-e-s-c-blank),它会选择以“Desc”开头的任何内容
  • @DaveE - 是的,它会,但如果他的专栏中唯一可能出现的内容是“Desc Top”、“Desc Bottom”、“Desc InsideOut”等,而不是“Descendant of Charlemaine',使用 Like Desc% 没有实际障碍。当然,如果他的表确实包含其他值,那么他就有问题了。
  • 腰带和吊带。显然他的数据不是他所期望的。 FIND 'Desc %' 在 SS2005 上对我有用。
  • @DaveE 你是对的,有一个标签......呃

标签: tsql wildcard space sql-like


【解决方案1】:

考虑使用其 ASCII 值明确声明您想要一个空格?

SELECT * FROM Table WHERE Field Like 'Desc' + CHAR(32) + '%'

【讨论】:

    【解决方案2】:

    使用方括号 '[' & ']' 设置单字符类进行匹配。在您的情况下,SQL 应如下所示:“select * from Table where Field like 'Desc[ ]%'”

    编辑:添加示例,链接

    CREATE TABLE #findtest (mytext  varchar(200) )
    
    insert #findtest VALUES ('Desc r')
    insert #findtest VALUES ('Descr')
    
    select * from #findtest where mytext like 'Desc[ ]%'
    
    DROP TABLE #findtest
    
    (1 row(s) affected)
    
    (1 row(s) affected)
    mytext
    --------
    Desc r
    
    (1 row(s) affected)
    

    参见this 文章。

    【讨论】:

    • 感谢您的提示。这行得通。很抱歉浪费了你们的时间。数据有一个制表符而不是空格。我从 Management Studio 网格中复制了值,并将选项卡转换为空格。
    【解决方案3】:

    由于下划线是单字符通配符,而百分比是多字符通配符,它​​们是相同的(“%”和“_%”)。就好像您要求两个连续的通配符。不确定我是否理解您的问题,但我并不感到惊讶它的行为与您预期的不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2018-08-27
      • 1970-01-01
      相关资源
      最近更新 更多