2

文字列に 1,2,3,4,5,6,7 のような数字 (文字) が任意の順序で含まれているかどうかを確認する場合のクエリ方法。これは、以下のように、1、2 などの節にANDステートメントを記述することで実現できます。LIKE

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

文字列に存在する特定の文字をチェックするクエリはありますか。または、上記の例が短い手のクエリでどのように達成できるか。助けてください。ありがとう。

4

6 に答える 6

1

これを行う 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
于 2012-12-06T17:25:57.467 に答える
0

を調べることをお勧めし[PATINDEX][1]ます。MSDNから:

すべての有効なテキストおよび文字データ型で、指定された式でパターンが最初に出現する開始位置を返します。パターンが見つからない場合はゼロを返します。

あなたはおそらく次のようなものを使用することになりますWHERE PATINDEX(%[0-9]%', foo) > 0

于 2012-12-06T08:00:25.273 に答える
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 が文字列内にあるかどうかを判断し、その後に必要なコードを記述できます。

于 2012-12-07T14:59:11.623 に答える
0

それらがすべて数字であることを確認するために使用isnumericし、1-7 の代わりに 0、8、または 9 をテストします。これは短いためです。

于 2012-12-07T15:08:52.750 に答える
0

CONTAINS()はうまくいきませんか?

また、単語を char 配列に分割する方法にも注意してください。

于 2012-12-06T07:40:31.853 に答える
-2

日がカンマで区切られている場合は、FIND_IN_SETを使用できます

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

それは違いますが、より良いというわけではありませんが、私の知る限り、他のネイティブな方法はありません。そして、LIKEはおそらくfind_in_setよりもはるかに高速になります

于 2012-12-06T07:56:34.007 に答える