这是我今天提出的(其他)愚蠢问题的续集
我在SQL Server中有一个存储过程,它需要根据关键字选择某些行,例如:
@Key varchar(5) = 'a'
select * From Products where ProductName like 'a%'
现在,@Key
除了0-9
,XYZ
到{{1}之外的所有其他普通字符外,还可以包含A
和B
等值}
所以当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选择名称从十进制开始?
这是唯一的方法吗?
感谢。
对不起,如果我问的问题太多了!
答案 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 - 还有一些技巧......