2012-12-06 170 views
2

如何查询我是否想要检查字符串是否包含任何顺序的数字(字符),如1,2,3,4,5,6,7。它可以通过写上LIKE条款AND报表数1,2..and等类似下面来实现,搜索字符串中的字符集

Where days like '%1%' and days like '%2%' ...... So on 

有哪些检查存在的字符串特定字符的任何查询。或者上面的例子如何用简短的查询来实现。请帮忙。谢谢。

回答

0

不会CONTAINS()为你工作?

另请注意如何split word into char array

+0

CONTAINS将会随机排列字符吗? –

+0

@eraj它会,但事情是,你必须使用全文索引来使用这个谓词。 –

+0

@eraj:如果您使用全文本,您需要从stoplist中删除这些字母,因为否则它将仅搜索字母而不是字母..并且全文搜索对于您的要求我不推荐。 – dotNETbeginner

-2

如果天昏迷分离可以使用FIND_IN_SET

SELECT FIND_IN_SET(1, days) AND FIND_IN_SET(2, days); 

这是不同的,而不是更好,但据我所知,没有其他的本地方法。 而LIKE可能会快得多然后find_in_set

0

我会建议看着[PATINDEX][1]。从MSDN:如果模式没有发现,在所有 有效的文本和字符数据类型

返回的图案在 第一次出现指定的表达式,或零的起始位置。

你最终可能会使用类似WHERE PATINDEX(%[0-9]%', foo) > 0

+0

当字符串中的任何字符与表达式匹配时,PATINDEX返回true。但我需要所有这些字符(1234567)出现在字符串中。 –

+0

然后我误解了这个问题。不确定,如果不使用一堆AND语句:( – SchmitzIT

1

的一种方式做,这是创建一个表与所有你想搜索的字符串。

例如

DECLARE @searchstr TABLE (s VARCHAR(10)) 
INSERT INTO @searchstr VALUES ('1'),('2'),('3'),('4'),('5'),('6'),('7') 

DECLARE @tbl TABLE (days VARCHAR(100)) 
INSERT INTO @tbl VALUES ('1234567'),('123'),('1122334'),('7654321') 

SELECT t.days 
FROM @tbl t 
LEFT JOIN @searchstr s 
     ON t.days LIKE '%' + s.s+ '%' 
GROUP BY t.days HAVING COUNT(DISTINCT s.s) = 7 
0

您可以使用CHARINDEX

CHARINDEX(stringthatcontainschars1, '1', numofpositiontostartlookingat) 
Output: 24, the position that your searched for char is at. returns zero if not found 

,如果你正在寻找在一列或一串数字1,你会放:

CHARINDEX(columnname, '1', 1) 
This would search for '1' beginning at position 1. 

你可以做一个基于条件语句关于它是否返回0来决定char是否在字符串中,然后写下你需要的任何代码。

0

我会使用isnumeric来确保它们都是数字,然后测试0,8或9而不是1-7,因为它更短。