【问题标题】:T-Sql Like Dilemma - selecting rows w.r.t. keywordT-Sql Like Dilemma - 选择行 w.r.t.关键词
【发布时间】:2011-02-10 13:06:50
【问题描述】:

这是我今天提出的(其他)愚蠢问题的续集

我在 SQL Server 中有一个存储过程,它需要根据关键字选择某些行,例如:

@Key varchar(5) = 'a'

select * From Products where ProductName like 'a%'

现在,@Key 可以包含 0-9XYZ 之类的值,除了从 ABW 的所有其他普通字符

所以当@KeyXYZ 时,它需要选择所有以字母X、Y、OR Z 开头的产品,当它的0-9 时,它应该选择所有以数字开头的产品.

所以我现在拥有的是:

WHERE
(@Key='xyz' and (name like 'x%' or name like 'y%' or name like 'z%'))
or name LIKE @Keyword +'%'

现在,为了让 proc 获取号码,我应该做一些类似于 XYZ 的操作,但包含 name like '0%' or name like '1%' 十次。

当然,应该有更好的方法让 SQL Server 选择从十进制开始的名称?

这是唯一的方法吗?

谢谢。

对不起,如果我问的问题太多了!

【问题讨论】:

    标签: sql-server where-clause sql-like


    【解决方案1】:

    LIKE 语句还允许在单个字符中使用通配符,例如

    SELECT...
    WHERE foo LIKE '[0-9]%'
    

    将返回 foo 以数字开头的值。

    同样,

    SELECT...
    WHERE foo LIKE '[aeiou]%'
    

    将返回 foo 以元音开头的值。

    检查documentation for LIKE - 还有一些技巧...

    【讨论】:

      【解决方案2】:

      你可以使用

      name like '[0-9]%'
      

      对于您可以使用的其他场景

      name like '[x-z]%'
      

      name like '[xyz]%'
      

      在不区分大小写的排序规则中,最后两个是等价的。但是,它们在区分大小写的排序规则中并不相同([x-z]% 将匹配“Yoghurt”,而 [xyz]% 不会)

      【讨论】:

      • 哈哈哈!非常感谢!很明显,我还有很多东西要学!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2012-04-25
      • 2021-05-06
      • 1970-01-01
      相关资源
      最近更新 更多