2012-12-06 166 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,因爲它更短。