T-Sql喜欢困境 - 选择行w.r.t.关键词

时间:2011-02-10 13:06:51

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

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

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

@Key varchar(5) = 'a'

select * From Products where ProductName like 'a%'

现在,@Key除了0-9XYZ到{{1}之外的所有其他普通字符外,还可以包含AB等值}

所以当W@Key时,需要选择所有以字母X,Y, OR Z开头的产品,并选择其XYZ时选择任何以数字开头的产品。

所以我现在拥有的是:

0-9

现在,为了让proc获取数字,我应该做类似于XYZ的事情,但包括WHERE (@Key='xyz' and (name like 'x%' or name like 'y%' or name like 'z%')) or name LIKE @Keyword +'%' 十次。

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

这是唯一的方法吗?

感谢。

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

2 个答案:

答案 0 :(得分:2)

您可以使用

name like '[0-9]%'

对于您的其他情况,您可以使用

name like '[x-z]%'

name like '[xyz]%'

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

答案 1 :(得分:2)

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

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

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

同样,

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

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

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